home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Forever 4
/
Atari Forever 4.zip
/
Atari Forever 4.iso
/
PD_THEMA
/
TEXTVERA
/
TEXTWRIT
/
TEXTWRIT.GFA
(
.txt
)
< prev
next >
Wrap
GFA-BASIC Atari
|
1998-03-14
|
75KB
|
3,600 lines
' -----------------------------------------------------------------------------
' Name : TEXTWRITER ST V2.3
' Autor : K-H Wallon,Leidenhofenerstraße 25, 3557 Ebsdorfergrund 6 (06424/4504)
' Datum : 23.03.89
' Uhrzeit : 153500
' Bemerkung : Das Drucken klappt noch nicht richtig! Falsche Blattlänge!
' : Papierlen=ca.55 aber immernoch viele Fehler beim Drucken!
'
' Ideen : Einrücken bis Cursor, Seitenformat,
' : Besseres Formatieren der Zeilen
'
' -----------------------------------------------------------------------------
ON BREAK GOSUB stoppen
ON ERROR GOSUB fehlerabfanger
DEFBYT "a-z"
DEFINT "r_"
IF XBIOS(4)<>2
ALERT 1,"Warnung! Das Programm ist|für die 640x400 Auflösung|geschrieben worden.",1," Return ",a%
ENDIF
DEFBYT "a-z"
DEFINT "r_"
@anfang
@rsc_init
@rsc_load
'
' RSC-Files noch ein bisschen verändern
'
OB_STATE(r_einstell%,ascmod&)=8
OB_STATE(r_einstell%,twmod&)=0
OB_STATE(r_textattr%,sfett&)=8
OB_STATE(r_textattr%,sunter&)=8
OB_STATE(r_textattr%,skursiv&)=8
OB_STATE(r_textattr%,shell&)=8
OB_STATE(r_textattr%,sscript&)=8
OB_STATE(r_textattr%,ssup&)=8
OB_STATE(r_einstell%,trennaus&)=8
'
@vorbereitungen
~FORM_DIAL(1,0,0,5,5,0,0,639,399)
~OBJC_DRAW(r_bild%,0,7,0,0,640,400)
LINE 0,384,639,384
COLOR 0
LINE 0,383,639,383
COLOR 1
GET 0,384,639,399,men$
@statuszeile
' PRINT CHR$(27)+"e"; ! VT52-Escape-Sequenz für Cursor einschalten
DO ! Die Endlosschleife für das Einlesen der Tasten
taste$=INKEY$
asc%=ASC(taste$)
scan%=ASC(RIGHT$(taste$))
IF asc%=27
@menue(FALSE)
ENDIF
IF LEN(taste$)=2 ! z.B. Cursorsteuerung, Undo- und Help-Taste, usw.
@kommando2
LPOKE XBIOS(14,1)+6,0 ! Tastaturpuffer leeren (Head- und Tail-
ENDIF
IF asc%>31 AND asc%<>127
@druckbares_zeichen
ELSE
IF LEN(taste$)=1
@kommando1 ! viele Control-Kommandos, Return, etc.
LPOKE XBIOS(14,1)+6,0 ! Tastaturpuffer leeren (Head- und Tailzeiger auf
ENDIF
ENDIF
IF MOUSEK=1
SELECT MOUSEY
CASE 15 TO 33
IF MOUSEX>(zlen%*cb%)
@zeilenlaenge
ENDIF
CASE 385 TO 400
@menue(TRUE)
DEFAULT
@cursor_setzen
ENDSELECT
ENDIF
IF MOUSEK=3
@plaziere_cursor
ENDIF
IF MOUSEK=2
IF MOUSEY<80
sp|=CRSCOL
PRINT CHR$(27)+"f";
von%=XBIOS(3)+2560
nach%=XBIOS(3)+3840
REPEAT
IF oberste%>0
DEC oberste%
BMOVE von%,nach%,26880
IF block!
IF oberste%+1>=blockanfang% AND oberste%+1<=blockende%
PRINT CHR$(27)+"p";
ELSE
PRINT CHR$(27)+"q";
ENDIF
ENDIF
PRINT AT(1,3);CHR$(27)+"l";zeile$(oberste%+1);
ENDIF
UNTIL MOUSEK<>2
@positionen
PRINT CHR$(27)+"e";
PRINT AT(sp|,3);
ENDIF
IF MOUSEY>320
sp|=CRSCOL
PRINT CHR$(27)+"f";
wo%=oberste%+23
von%=XBIOS(3)+3840
nach%=XBIOS(3)+2560
REPEAT
IF wo%=<max_zeilen%
BMOVE von%,nach%,26880
IF block!
IF wo%>=blockanfang% AND wo%<=blockende%
PRINT CHR$(27)+"p";
ELSE
PRINT CHR$(27)+"q";
ENDIF
ENDIF
PRINT AT(1,24);CHR$(27)+"l";zeile$(wo%);
ENDIF
INC wo%
UNTIL MOUSEK<>2
oberste%=wo%-23
@positionen
PRINT CHR$(27)+"e";
PRINT AT(sp|,24);
ENDIF
ENDIF
LOOP
'
> PROCEDURE vorbereitungen
@cl_s
OPTION BASE 1
max_zeilen%=FRE(0)/85
max_zeilen%=MIN(max_zeilen%,5000)
DIM zeile$(max_zeilen%) ! enthält die Textzeilen
DIM dummy$(max_zeilen%) ! wird für einige Blockoperationen benötigt
DIM x%(10),y%(10),t$(10),l%(10),v%(10),i$(10),par!(7)
DIM tabulator!(80),ztabulator!(80)
DIM marke%(3),phr$(10)
DIM vorsilbe$(32)
RESTORE vorsilben
FOR i|=1 TO 32
READ vorsilbe$(i|)
NEXT i|
vokalmenge$="aeiouäöüyAEIOUÄÖÜY"
nichttrennen$="ch ph ei eu th st"
ARRAYFILL par!(),FALSE
ARRAYFILL tabulator!(),FALSE
ARRAYFILL ztabulator!(),FALSE
par!(5)=TRUE
basis%=LPEEK(ARRPTR(pointer%()))+4
dummy_basis%=LPEEK(ARRPTR(dummy%()))+4
asc!=FALSE
tw!=TRUE
links!=TRUE
rechts!=FALSE
blocksatz!=FALSE
zentre!=FALSE
insertmode!=TRUE
tausch!=TRUE
invers!=TRUE
altse$=" 1"
i%=0
VDISYS 38
cb%=DPEEK(PTSOUT+4)
ch%=DPEEK(PTSOUT+6)
lh%=DPEEK(PTSOUT+2)
'
' einstellen der Druckerparameter
'
elite$=CHR$(27)+"M"
pica$=CHR$(27)+"P"
nlq$=CHR$(27)+"x"+CHR$(1)
nlqaus$=CHR$(27)+"x"+CHR$(0)
schmal$=CHR$(27)+CHR$(15)
schmalaus$=CHR$(18)
prop$=CHR$(27)+"p"+CHR$(1)
propaus$=CHR$(27)+"p"+CHR$(0)
kur$=CHR$(27)+">"
kuraus$=CHR$(27)+"#"
dopp$=CHR$(27)+"G"
doppaus$=CHR$(27)+"H"
druck$=CHR$(27)+"R"+CHR$(2)+schmalaus$+elite$
zeistand%=12
'
' Ende der Druckeranpassung
'
' Allgemeine Variabeln zur Programmsteuerung
'
pfad$="\*.TXT"
filename$="testtext.txt"
menstr$="dbastceDBASTCE"
diskstr$="lsap-ofdwn-qx"
blockstr$="ae-ls-kvdp-m"
arbstr$="iu-zdtp-senf-1!2"+CHR$(34)+"3§"
einstr$="szdhatp--nvg"
tabulator%=5
papierlen%=64
seitelen%=58
lrand%=0
rrand%=79
kopfob%=0
aboben%=2
fuss%=0
abunten%=2
zlen%=79
menue%=1
oberste%=0 ! Nummer der Textzeile in der ersten Bildschirmzeile
trenne!=TRUE
'
' Array für Seitengrenzen anlegen
'
DIM seiten!(max_zeilen%)
ARRAYFILL seiten!(),FALSE
OPTION BASE 0
FOR i%=0 TO max_zeilen%-1 STEP seitelen%
seiten!(i%)=TRUE
NEXT i%
FOR i|=0 TO seitelen%-1
seiten!(i|)=FALSE
NEXT i|
VOID XBIOS(21,3,-1) ! Cursorblinken im compilierten Programm ausschalten
PRINT CHR$(27)+"w"; ! VT52 für automatischen Zeilenüberlauf abschalten
'
' Tabulatorleiste erstellen
'
OPTION BASE 0
FOR i|=0 TO zlen% STEP tabulator%
tabulator!(i|)=TRUE
NEXT i|
OPTION BASE 1
IF BIOS(11,-1) AND 16=16
PRINT AT(34,1);"©"
ELSE
PRINT AT(34,1);" "
ENDIF
PRINT AT(1,3);
@mauslesen
RETURN
> PROCEDURE druckbares_zeichen
LOCAL sp|,zp|,laenge|,raus!
zp|=CRSLIN
sp|=CRSCOL
nr%=(oberste%-2)+CRSLIN
um|=BIOS(11,-1)
IF asc%=54 ! Cursor rechts zum Wortanfang
IF BIOS(11,-1)>=1 AND BIOS(11,-1)<=3 ! mit der Shift Taste
nr%=(oberste%-2)+CRSLIN
IF LEN(zeile$(nr%))>sp|
npos|=INSTR(sp|,zeile$(nr%)," ")
IF npos|>0
sp|=npos|+1
ENDIF
ENDIF
PRINT AT(sp|,zp|);
GOTO druckbar_ende
ENDIF
ENDIF
'
IF asc%=52 ! Cursor Links
IF BIOS(11,-1)>=1 AND BIOS(11,-1)<=3 ! mit der Shift Taste
raus!=FALSE
nr%=(oberste%-2)+CRSLIN
laenge|=LEN(zeile$(nr%))
IF laenge|>sp|
FOR i|=sp| DOWNTO 1
IF MID$(zeile$(nr%),i|,1)=" "
npos|=i|
raus!=TRUE
ENDIF
EXIT IF raus!
NEXT i|
IF npos|>1
sp|=npos|-1
ENDIF
ENDIF
PRINT AT(sp|,zp|);
GOTO druckbar_ende
ENDIF
ENDIF
IF asc%=50 ! Cursor runter
IF BTST(um|,0) OR BTST(um|,1) ! mit der Shift oder Control-Taste
@page_down
GOTO druckbar_ende
ENDIF
ENDIF
IF asc%=56
IF BTST(um|,0) OR BTST(um|,1)! mit der Shift oder Control-Taste
@page_up
GOTO druckbar_ende
ENDIF
ENDIF
IF block!
IF wo%>=blockanfang% AND wo%<=blockende%
PRINT CHR$(27)+"p";
ELSE
PRINT CHR$(27)+"q";
ENDIF
ENDIF
anzahl_zeilen%=MAX(anzahl_zeilen%,nr%)
laenge|=LEN(zeile$(nr%))
IF laenge|<sp|-1
zeile$(nr%)=zeile$(nr%)+SPACE$(sp|-laenge|-1)
ENDIF
IF LEN(zeile$(nr%))<=zlen%-1
IF insertmode!
zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+taste$+MID$(zeile$(nr%),sp|)
PRINT MID$(zeile$(nr%),sp|);
PRINT AT(sp|+1,zp|);
ELSE
IF sp|>laenge|
zeile$(nr%)=LEFT$(zeile$(nr%),sp|)+taste$+MID$(zeile$(nr%),sp|)
ELSE
MID$(zeile$(nr%),sp|)=taste$
ENDIF
PRINT taste$;
ENDIF
ELSE
IF sp|<zlen%
@format_zurueck
PRINT AT(sp|+1,zp|);
ELSE
@trenn
ENDIF
ENDIF
druckbar_ende:
@positionen
RETURN
> PROCEDURE kommando1
LOCAL sp|,zp|,bild_oben$,gehe_in$,i|,alti|,raus!,spa|,laenge|
kommandocode%=ASC(taste$)
umschalt%=BIOS(11,-1)
'
IF kommandocode%=16 ! Control+P: Druckereinstellung
zp|=CRSLIN
sp|=CRSCOL
PRINT CHR$(27)+"f";
@einstellung_grafik
@einstellung_select
@ausgabe_ab_zeile(oberste%+1)
PRINT CHR$(27)+"e";
PRINT AT(sp|,zp|);
ENDIF
'
IF kommandocode%=9 AND umschalt%=4 OR umschalt%=20 ! Control+I: Invertieren des Bildschirms
' ! mit umschalt% sonst wie TAB
IF invers!
SETCOLOR 0,7,7,7
invers!=FALSE
ELSE
SETCOLOR 0,0,0,0
invers!=TRUE
ENDIF
GOTO raus_hier
ENDIF
'
IF kommandocode%=4 ! Control+D: Text drucken
@text_drucken
GOTO raus_hier
ENDIF
'
IF kommandocode%=6 ! Control+F: Text suchen
IF suchstring$<>""
@suchen_ab((oberste%-2)+CRSLIN+1)
ENDIF
GOTO raus_hier
ENDIF
'
IF kommandocode%=7 ! Control+G
PRINT CHR$(27)+"f"; ! Cursor ausschalten
GET 0,0,639,20,bild_oben$
zp|=CRSLIN
sp|=CRSCOL
PRINT AT(1,1);SPACE$(zlen%-1);
LINE 0,18,639,18
LINE 0,19,639,19
PRINT AT(1,1);"Gehe zu Seite: "
PRINT AT(16,1);
FORM INPUT 5,gehe_in$
gehe_in$=STR$((VAL(gehe_in$)-1)*seitelen%)
IF VAL(gehe_in$)=0
gehe_in$="1"
ENDIF
PUT 0,0,bild_oben$
PRINT CHR$(27)+"e"; ! Cursor einschalten
IF VAL(gehe_in$)<1 OR VAL(gehe_in$)>max_zeilen%
ALERT 1,"Diese Seite|existiert nicht.",1," Return ",a%
PRINT AT(1,3);
ELSE
oberste%=VAL(gehe_in$)-1
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(1,3);
ENDIF
@statuszeile
GOTO raus_hier
ENDIF
'
IF kommandocode%=9 ! Tabulator anspringen
sp|=CRSCOL
zp|=CRSLIN
i|=sp|
alti|=i|
raus!=FALSE
REPEAT
IF i|<zlen%-1
INC i|
ELSE
raus!=TRUE
i|=alti|
ENDIF
UNTIL tabulator!(i|)=TRUE OR raus!=TRUE
sp|=i|
PRINT AT(sp|,zp|);
GOTO raus_hier
ENDIF
'
IF kommandocode%=18 ! Control+R: suchen und ersetzen
IF suchstring$<>""
@ersetzen_ab((oberste%-2)+CRSLIN)
ENDIF
GOTO raus_hier
ENDIF
'
IF kommandocode%=20 ! Control+T: Tabulator setzen/löschen
sp|=CRSCOL
tabulator!(sp|)=NOT (tabulator!(sp|))
@tableiste
GOTO raus_hier
ENDIF
'
IF kommandocode%=3 ! Control+C : Cursorgeschwindigkeit
ALERT 2,"Welche Cursorgeschwindigkeit|wollen Sie einstellen ?",2,"Schnell|Mittel|Langsam",a|
IF a|=3
INC a|
ENDIF
VOID XBIOS(35,10,a|)
GOTO raus_hier
ENDIF
'
IF kommandocode%=26 ! Control+Z: gehe ans Textende
oberste%=MAX(1,anzahl_zeilen%-24)+2
@ausgabe_ab_zeile(oberste%+1)
GOTO raus_hier
ENDIF
'
IF kommandocode%=8 ! Backspace-Taste
IF CRSCOL>1
nr%=CRSLIN+(oberste%-2)
IF LEN(zeile$(nr%))>=CRSCOL-2 AND LEN(zeile$(nr%))>=1
zp|=CRSLIN
sp|=CRSCOL
PRINT AT(sp|-1,zp|);MID$(zeile$(nr%),sp|);" ";
PRINT AT(sp|-1,zp|);
zeile$(nr%)=LEFT$(zeile$(nr%),sp|-2)+MID$(zeile$(nr%),sp|)
@format_absatz
ELSE
PRINT AT(CRSCOL-1,CRSLIN);
ENDIF
ELSE
IF CRSLIN<4
@scroll_runter
PRINT AT(LEN(zeile$(oberste%+1)),3);
ELSE
IF LEN(zeile$(oberste%-3+CRSLIN))<zlen%
a|=1
ELSE
a|=0
ENDIF
PRINT AT(a|+LEN(zeile$(oberste%-3+CRSLIN)),CRSLIN-1);
ENDIF
PRINT CHR$(7); ! Fehlerglocke
ENDIF
GOTO raus_hier
ENDIF
'
IF kommandocode%=13 ! Return-Taste: gehe an den Anfang der nächsten Zeile.
nr%=oberste%-2+CRSLIN
IF RIGHT$(zeile$(nr%))<>CHR$(174)
zeile$(nr%)=zeile$(nr%)+CHR$(174)
IF rechts! !rechtsbündig im Speicher
zeile$(nr%)=TRIM$(zeile$(nr%))
zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
ELSE IF zentre!
zeile$(nr%)=TRIM$(zeile$(nr%))
laenge|=LEN(zeile$(nr%))
spa|=zlen%/2-(TRUNC(laenge|/2))
zeile$(nr%)=SPACE$(spa|)+zeile$(nr%)
ENDIF
PRINT AT(1,CRSLIN);zeile$(nr%);
ENDIF
IF CRSLIN=24
@scroll_rauf
PRINT AT(1,24);
ELSE
PRINT AT(1,CRSLIN+1);
ENDIF
GOTO raus_hier
ENDIF
'
IF kommandocode%=127 ! Delete-Taste
nr%=CRSLIN+(oberste%-2)
IF LEN(zeile$(nr%))>=CRSCOL
zp|=CRSLIN
sp|=CRSCOL
zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+MID$(zeile$(nr%),sp|+1)
PRINT MID$(zeile$(nr%),sp|);" ";
PRINT AT(sp|,zp|);
@format_absatz
ENDIF
ENDIF
'
IF kommandocode%=19 ! Control + S = Seitenformat einstellen
@seite_zeigen !nformat
ENDIF
raus_hier:
@positionen
DEFMOUSE pfeil$
RETURN
> PROCEDURE kommando2
LOCAL sp|,zp|,laenge|
kommandocode%=ASC(RIGHT$(taste$))
umschalt%=BIOS(11,-1) AND 8
'
IF kommandocode%=72 ! Cursor rauf
scrol!=FALSE
IF CRSLIN=3
@scroll_runter
ELSE
PRINT CHR$(27)+"A";
ENDIF
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=80 ! Cursor runter
scrol!=TRUE
anz%=oberste%-2+CRSLIN
anzahl_zeilen%=MAX(anz%,anzahl_zeilen%)
IF CRSLIN=24
@scroll_rauf
ELSE
PRINT CHR$(27)+"B";
ENDIF
GOTO ausstieg_aus_procedure
ENDIF
'
'
IF kommandocode%=77 ! Cursor rechts
IF CRSCOL<1+LEN(zeile$(oberste%-2+CRSLIN)) !zlen%
PRINT CHR$(27)+"C";
@positionen
ELSE
IF CRSLIN>23
@scroll_rauf
PRINT AT(1,24);
ELSE
PRINT AT(1,CRSLIN+1);
ENDIF
ENDIF
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=75 ! Cursor links
IF CRSCOL>1
PRINT CHR$(27)+"D";
@positionen
ELSE
IF CRSLIN<4
@scroll_runter
PRINT AT(LEN(zeile$(oberste%+1)),3);
ELSE
IF LEN(zeile$(oberste%-3+CRSLIN))<zlen%
a|=1
ELSE
a|=0
ENDIF
PRINT AT(a|+LEN(zeile$(oberste%-3+CRSLIN)),CRSLIN-1);
ENDIF
ENDIF
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=59 ! F1
@text_laden
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=60 ! F2
@text_speichern
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=61 ! F3
@zeile_einfuegen
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=62 ! F4
@zeile_loeschen
GOTO ausstieg_aus_procedure
ENDIF
'
IF kommandocode%=63 ! F5
sp|=CRSCOL
zp|=CRSLIN
links!=TRUE
rechts!=FALSE
blocksatz!=FALSE
zentre!=FALSE
PRINT AT(27,1);"Links "
PRINT AT(sp|,zp|);
ENDIF
'
IF kommandocode%=64 ! F6
sp|=CRSCOL
zp|=CRSLIN
links!=FALSE
rechts!=TRUE
blocksatz!=FALSE
zentre!=FALSE
PRINT AT(27,1);"Recht "
PRINT AT(sp|,zp|);
ENDIF
'
IF kommandocode%=65 ! F7
sp|=CRSCOL
zp|=CRSLIN
links!=FALSE
rechts!=FALSE
blocksatz!=FALSE
zentre!=TRUE
PRINT AT(27,1);"Zentr "
PRINT AT(sp|,zp|);
ENDIF
'
IF kommandocode%=66 ! F8
sp|=CRSCOL
zp|=CRSLIN
links!=FALSE
rechts!=FALSE
blocksatz!=TRUE
zentre!=FALSE
PRINT AT(27,1);"Blocks"
PRINT AT(sp|,zp|);
ENDIF
'
IF kommandocode%=67 ! F9
@nochmal
ENDIF
'
IF kommandocode%=68 ! F10
nr%=oberste%-2+CRSLIN
IF RIGHT$(zeile$(nr%))=CHR$(174)
p%=nr%
ELSE
FOR i%=nr% TO anzahl_zeilen%
IF RIGHT$(zeile$(i%))=CHR$(174)
p%=i%
ENDIF
EXIT IF p%>0
NEXT i%
ENDIF
@textformat(nr%,p%)
ENDIF
'
IF kommandocode%=97 ! Undo-Taste für aktuellen Text löschen
ENDIF
'
IF kommandocode%=98 ! Help-Taste für Anzeige der Editorkommandos
ENDIF
'
'
IF kommandocode%=84 ! Shift+F1: Blockanfang markieren
@block_anfang
ENDIF
'
IF kommandocode%=85 ! Shift+F2: Blockende markieren
@block_ende
ENDIF
'
IF kommandocode%=86 ! Shift+F3: Block kopieren
@block_kopieren
ENDIF
'
IF kommandocode%=87 ! Shift+F4: Block verschieben
@block_verschieben
ENDIF
'
IF kommandocode%=88 ! Shift+F5: Block speichern
@block_speichern
ENDIF
'
IF kommandocode%=89 ! Shift+F6: Block mergen
@block_mergen
ENDIF
'
IF kommandocode%=90 ! Shift+F7: Block drucken
@block_drucken
ENDIF
'
IF kommandocode%=91 ! Shift+F8: Block löschen
@block_loeschen
ENDIF
'
IF kommandocode%=92 ! Shift+F9: Blockmarkierung aufheben
@block_markierung
ENDIF
'
IF kommandocode%=93 ! Shift F10: Umschalten auf zweiten Textspeicher!
ENDIF
'
IF kommandocode%=116 ! Control+Cursor rechts, springe ans Zeilenende
nr%=(oberste%-2)+CRSLIN
laenge|=LEN(zeile$(nr%))
IF laenge|<zlen%
INC laenge|
ENDIF
PRINT AT(laenge|,CRSLIN);
@positionen
ENDIF
'
IF kommandocode%=115 ! Control+Cursor links, springe an Zeilenanfang
PRINT AT(1,CRSLIN);
ENDIF
'
IF kommandocode%=71 ! Home-Taste
PRINT AT(1,3);
ENDIF
'
IF kommandocode%=82 ! Insert-Taste Leerstelle einfügen
@zeile_einfuegen
ENDIF
'
IF kommandocode%=119 ! Control+Home
@text_anfang
ENDIF
ausstieg_aus_procedure:
@positionen
RETURN
> PROCEDURE scroll_rauf
LOCAL sp|
IF oberste%+22=<max_zeilen%
INC oberste%
sp|=CRSCOL
PRINT CHR$(27)+"f"; ! Cursor ausschalten
BMOVE XBIOS(3)+3840,XBIOS(3)+2560,26880 !28160
IF block!
IF oberste%+22>=blockanfang% AND oberste%+22<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT AT(1,24);CHR$(27)+"e";CHR$(27)+"l";zeile$(oberste%+22);
PRINT AT(sp|,CRSLIN);
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
RETURN
> PROCEDURE scroll_runter
LOCAL sp|
IF oberste%>0
DEC oberste%
sp|=CRSCOL
PRINT CHR$(27)+"f"; ! Cursor ausschalten
BMOVE XBIOS(3)+2560,XBIOS(3)+3840,26880 !29440 !28160
IF block!
IF oberste%+1>=blockanfang% AND oberste%+1<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT AT(1,3);CHR$(27)+"e";CHR$(27)+"l";zeile$(oberste%+1);
PRINT AT(sp|,CRSLIN);
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
RETURN
> PROCEDURE ausgabe_ab_zeile(nr%)
LOCAL bis%
@cl_s
IF anzahl_zeilen%>0
bis%=MIN(nr%+21,anzahl_zeilen%)
IF nr%=anzahl_zeilen%
IF block!
IF nr%>=blockanfang% AND nr%<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT zeile$(nr%)
ENDIF
IF nr%<anzahl_zeilen%
IF bis%>nr%
FOR i%=nr% TO bis%-1
IF block!
IF i%>=blockanfang% AND i%<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT zeile$(i%) ! Ausgeben mit Linefeed
IF seiten!(i%)=TRUE
' LINE 0,(1+i%-nr%)*ch%,639,(1+i%-nr%)*ch%
LINE 0,(2+i%-nr%)*ch%-1,639,(2+i%-nr%)*ch%-1
ENDIF
NEXT i%
ENDIF
IF block!
IF bis%>=blockanfang% AND bis%<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT zeile$(bis%); ! Letzte Zeile ohne Linefeed ausgeben.
ENDIF
ENDIF
RETURN
> PROCEDURE plaziere_cursor
LOCAL mark!,sp|,zp|,cx|,cy|,mx%,my%,anx%,any%
zp|=INT(MOUSEY/16)+1
IF zp|>2
sp|=INT(MOUSEX/8)+1
anx%=MOUSEX
any%=MOUSEY
blockanfang%=(oberste%-2)+zp|
PRINT AT(sp|,zp|);
GRAPHMODE 3
DEFLINE 1,1,0,0
BOX 639,399,640,400
mx%=MOUSEX
my%=MOUSEY
WHILE MOUSEK=3
IF mx%<>MOUSEX OR my%<>MOUSEY ! verhindert Flimmern des Cursors
cx|=MOUSEX/8+1
cy|=MOUSEY/16+1
PRINT AT(cx|,cy|);
IF cy|>blockanfang% AND cy|<3
@scroll_runter
ENDIF
IF cy|=>24
@scroll_rauf
ENDIF
BOX anx%,any%,mx%,my%
BOX anx%,any%,mx%,my%
mx%=MOUSEX
my%=MOUSEY
ENDIF
WEND
PRINT CHR$(27)+"f";
blockende%=(oberste%-2)+INT(MOUSEY/16)+1
IF blockende%>=blockanfang%
block!=TRUE
ELSE
block!=FALSE
ENDIF
GRAPHMODE 1
@ausgabe_ab_zeile(oberste%+1)
PRINT CHR$(27)+"e";
PRINT AT(sp|,zp|);
ENDIF
@statuszeile
RETURN
> PROCEDURE cursor_setzen
LOCAL sp|,zp|,mx%,my%
zp|=INT(MOUSEY/16)+1
sp|=INT(MOUSEX/8)+1
IF zp|>2 AND zp|<25
IF sp|<=zlen%
PRINT AT(sp|,zp|);
ENDIF
ENDIF
RETURN
> PROCEDURE suchen_ab(zeile%)
LOCAL found!,p|
found!=FALSE
IF zeile%<=anzahl_zeilen%
FOR i%=zeile% TO anzahl_zeilen%
p|=INSTR(zeile$(i%),suchstring$)
IF p|<>0
found!=TRUE
ENDIF
EXIT IF found!
NEXT i%
ENDIF
IF found!
oberste%=MAX(0,i%-1)
@ausgabe_ab_zeile(i%)
PRINT AT(p|,3);
ELSE
oberste%=MAX(0,anzahl_zeilen%-24)
@ausgabe_ab_zeile(oberste%+1)
ALERT 1,"Suchstring nicht gefunden.",1," Return ",a%
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE ersetzen_ab(zeile%)
LOCAL found!,found_at%,p|,wo|
found!=FALSE
IF zeile%<=anzahl_zeilen%
FOR i%=zeile% TO anzahl_zeilen%
wo|=INSTR(zeile$(i%),suchstring$)
IF wo|<>0
found!=TRUE
ENDIF
EXIT IF found!
NEXT i%
ENDIF
found_at%=i%
IF found!
IF LEN(zeile$(i%))+LEN(ersatzstring$)-LEN(suchstring$)>zlen%
ALERT 1,"Ersetzen nicht möglich,|Ersatzstring ist zu lang.",1," Return ",a%
ELSE
nr%=i%
zeile$(nr%)=LEFT$(zeile$(nr%),wo%-1)+ersatzstring$+MID$(zeile$(nr%),wo%+LEN(suchstring$))
ENDIF
oberste%=i%-1
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(wo|,3);
ELSE
oberste%=MAX(0,anzahl_zeilen%-24)
@ausgabe_ab_zeile(oberste%+1)
ALERT 1,"Suchstring nicht gefunden.",1," Return ",a%
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE drucken(von%,bis%)
LOCAL z|,se$,i1|,dzeile$,restseite%,a|,kopfzeile$,fusszeile$,zeiger%
zeiger%=von%
i%=1
IF GEMDOS(17)
'
' erstellen von kopf und Fußzeilen
'
IF kopfl$<>"" OR kopfm$<>"" OR kopfr$<>""
@seitenummer_drucken(kopfl$)
@seitenummer_drucken(kopfm$)
@seitenummer_drucken(kopfr$)
kopfzeile$=kopfl$+SPACE$(25-LEN(kopfl$))
kopfzeile$=kopfzeile$+SPACE$(12-LEN(kopfm$)/2)+kopfm$+SPACE$(12-LEN(kopfm$)/2)
kopfzeile$=kopfzeile$+SPACE$(25-LEN(kopfr$))+kopfr$
@zeile_testen(kopfzeile$)
ENDIF
IF fussl$<>"" OR fussm$<>"" OR fussr$<>""
@seitenummer_drucken(fussl$)
@seitenummer_drucken(fussm$)
@seitenummer_drucken(fussr$)
fusszeile$=fussl$+SPACE$(25-LEN(fussl$))
fusszeile$=fusszeile$+SPACE$(12-LEN(fussm$)/2)+fussm$+SPACE$(12-LEN(fussm$)/2)
fusszeile$=fusszeile$+SPACE$(25-LEN(fussr$))+fussr$
@zeile_testen(fusszeile$)
ENDIF
OPEN "",#4,"LST:"
REPEAT
IF kopfob%>0 OR kopfzeile$<>""
FOR i|=1 TO kopfob%
PRINT #4,
NEXT i|
IF kopfzeile$<>""
PRINT #4,druck$;kopfzeile$
ENDIF
ENDIF
IF aboben%>0
FOR i1|=1 TO aboben%
PRINT #4,
NEXT i1|
ENDIF
FOR i%=zeiger% TO zeiger%+seitelen%-1
'
' Anzeigen der Seitennummer auf dem Bildschirm
'
IF seiten!(i%)
se$=STR$(INT(i%/seitelen%)+1)
TEXT 225,224,se$
ENDIF
'
' Abschneiden des Absatzzeichens
'
IF RIGHT$(zeile$(i%))=CHR$(174)
dzeile$=LEFT$(zeile$(i%),LEN(zeile$(i%))-1)
ELSE
dzeile$=zeile$(i%)
ENDIF
'
' anpassen des Zeichensatzes an den Drucker
'
@zeile_testen(dzeile$)
'
' Aktuelle Zeile 'DZEILE$' ausdrucken
'
IF par!(7) ! Zeile zweimal drucken
PRINT #4,SPACE$(lrand%);druck$;dzeile$;CHR$(13);CHR$(27);"A";CHR$(0)
PRINT #4,SPACE$(lrand%);dzeile$;CHR$(27);"A";CHR$(11)
ELSE ! Zeile einmal drucken
PRINT #4,SPACE$(lrand%);druck$;dzeile$
ENDIF
NEXT i%
'
' Fußzeile Ausgeben
'
IF fuss%>0 OR fusszeile$<>""
FOR i|=1 TO fuss%
PRINT #4,
NEXT i|
IF fusszeile$<>""
PRINT #4,druck$;fusszeile$
ENDIF
ENDIF
'
' Abstand von unten ausgeben
'
IF abunten%>0
FOR i1|=1 TO abunten%
PRINT #4,
NEXT i1|
ENDIF
'
' Zeiger auf den nächsten Seitenanfang stellen
'
ADD zeiger%,seitelen%
'
' ist noch eine Seite zu drucken ? Ja dann neues Blatt einlegen
'
IF zeiger%<bis%
REPEAT
ALERT 1,"Bitte ein neues Blatt |einlegen ",1," Okay | Abbruch",a|
UNTIL GEMDOS(17) OR a|=2
DEFMOUSE pfeil$
ENDIF
UNTIL zeiger%>bis% OR a|=2
ELSE
ALERT 1,"Machen Sie zuerst|Ihren Drucker bereit.",1," Return ",a%
ENDIF
CLOSE #4
DEFMOUSE pfeil$
RETURN
> PROCEDURE fehlerabfanger
LOCAL a|
ALERT 3,"Ein programminterner Fehler|ist aufgetreten (Code: "+STR$(ERR)+")|Wollen Sie Ihren Text ab-|speichern ?",1," Nein | Ja ",a|
IF a|=2
IF anzahl_zeilen%>0
PRINT CHR$(27)+"f"; ! Cursor ausschalten
@cl_s
BOX 157,29,482,53
BOX 159,31,480,51
TEXT 263,47,"Text speichern"
@text_speichern_als
ELSE
ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a|
ENDIF
ENDIF
ALERT 2,"Soll der Versuch gemacht|werden, mit dem Programm|fortzufahren ?",1," Nein | Ja ",a|
IF a|=1
END
ELSE
oberste%=0
@ausgabe_ab_zeile(1)
PRINT AT(1,3);
ON ERROR GOSUB fehlerabfanger
RESUME NEXT
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE stoppen
ALERT 1,"Na Na Na! Beendet man|denn SO ein programm?|Mit ESC-D-Q geht es doch|auch! SPEICHERN !!!",1," DUMP | Wieter | Raus ",a|
IF a|=1
DUMP "DUMP.DMP"
ELSE IF a|=3
ALERT 1,"Text noch Speichern?",1,"Ja|Nein",a|
IF a|=1
@text_speichern
ENDIF
EDIT
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE divide_long_lines(anzahl%)
WHILE LEN(zeile$(anzahl%))>zlen% AND anzahl%<max_zeilen%
z$=zeile$(anzahl%)
zeile$(anzahl%)=LEFT$(z$,zlen%)
INC anzahl%
zeile$(anzahl%)=MID$(z$,zlen%+1)
WEND
RETURN
> PROCEDURE pfad_merken
IF filename$<>""
pfad$=filename$
IF RIGHT$(pfad$)<>"\"
FOR i%=LEN(filename$) DOWNTO 1
pfad$=LEFT$(pfad$,LEN(pfad$)-1)
EXIT IF RIGHT$(pfad$)="\"
NEXT i%
pfad$=pfad$+"*.TXT"
ENDIF
ENDIF
RETURN
> PROCEDURE statuszeile
LOCAL p|,p1|,n$,ext$,zp|,sp|,raus!
zp|=CRSLIN
sp|=CRSCOL
PRINT AT(1,1);"Name:________.___ I B Links Zeile: 1 Spalte: 1 Seite: 1"
@tableiste
PRINT CHR$(27)+"q";
IF NOT (RIGHT$(filename$)="\" OR filename$="")
filename$=UPPER$(filename$)
raus!=FALSE
p|=RINSTR(filename$,".")
p1|=RINSTR(filename$,"\")
n$=MID$(filename$,p1|+1,p|-(p1|+1))
n$=n$+SPACE$(8-LEN(n$))
ext$=RIGHT$(filename$,3)
ENDIF
PRINT AT(6,1);n$;AT(15,1);ext$
IF block!
PRINT AT(23,1);"B"
ELSE
PRINT AT(23,1);" "
ENDIF
@positionen
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE positionen
LOCAL zp|,sp|,z$,s$,z%,s%,se%,altse$
PRINT CHR$(27)+"q";
IF block!
wo%=(oberste%-2)+CRSLIN
IF wo%>blockanfang% AND wo%<blockende%
PRINT CHR$(27)+"p";
ELSE
PRINT CHR$(27)+"q";
ENDIF
ENDIF
PRINT CHR$(27)+"f";
zp|=CRSLIN
sp|=CRSCOL
altse$=se$
s%=CRSCOL
s$=STR$(s%,2)
z%=oberste%-2+CRSLIN
z$=STR$(z%,4)
'
' seitengrenze Normal
'
' IF z%>0
IF seiten!(z%+1)=TRUE
LINE 0,(zp|)*ch%-1,639,(zp|)*ch%-1
ENDIF
' ENDIF
se|=1+INT((z%-1)/seitelen%)
se$=STR$(se|,4)
PRINT AT(50,1);z$;AT(64,1);s$;AT(76,1);se$
IF BIOS(11,-1)=16
PRINT AT(25,1);"©"
ELSE
PRINT AT(25,1);" "
ENDIF
IF block!
wo%=(oberste%-2)+CRSLIN
IF wo%>blockanfang% AND wo%<blockende%
PRINT CHR$(27)+"p";
ELSE
PRINT CHR$(27)+"q";
ENDIF
ENDIF
PRINT CHR$(27);"e";
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE tableiste
LOCAL sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
PRINT AT(1,2);CHR$(27);"K";
PRINT AT(1,2);">"
FOR i|=1 TO zlen%
IF tabulator!(i|)
PRINT AT(i|,2);"+";
ELSE
PRINT AT(i|,2);"-"
ENDIF
NEXT i|
PRINT AT(zlen%+1,2);"<";
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE cl_s
DEFFILL 0
PBOX 0,30,639,382
PRINT AT(1,3);
RETURN
> PROCEDURE page_up
LOCAL sp|,zp|
PRINT CHR$(27)+"f";
IF oberste%>0
zp|=CRSLIN
sp|=CRSCOL
IF oberste%<20
oberste%=0
@ausgabe_ab_zeile(1)
ELSE
SUB oberste%,20
@ausgabe_ab_zeile(oberste%+1)
ENDIF
PRINT AT(sp|,zp|);
ELSE
PRINT AT(1,3);CHR$(7); ! Fehlerglocke falls keine Seite mehr vorhanden
ENDIF
PRINT CHR$(27)+"e";
RETURN
> PROCEDURE page_down
LOCAL sp|,zp|
PRINT CHR$(27)+"f";
IF oberste%<max_zeilen%-23
zp|=CRSLIN
sp|=CRSCOL
IF oberste%>max_zeilen%-44
oberste%=max_zeilen%-23
@ausgabe_ab_zeile(oberste%+1)
ELSE
ADD oberste%,20
@ausgabe_ab_zeile(oberste%+1)
ENDIF
PRINT AT(sp|,zp|);
ELSE
PRINT AT(1,3);CHR$(7); ! Fehlerglocke, falls keine Seite mehr vorhanden
ENDIF
PRINT CHR$(27)+"e";
RETURN
> PROCEDURE menueleiste
PUT 0,384,men$
RETURN
> PROCEDURE mauslesen
'
' Mouse-Daten in einen String umwandeln
RESTORE mauspfeil
LET pfeil$=MKI$(0)+MKI$(0)+MKI$(1)
LET pfeil$=pfeil$+MKI$(0)+MKI$(1)
FOR i|=1 TO 16
READ hinten%
LET pfeil$=pfeil$+MKI$(hinten%)
NEXT i|
FOR i|=1 TO 16
READ vorn%
LET pfeil$=pfeil$+MKI$(vorn%)
NEXT i|
mauspfeil:
DATA 61440,39936,34560,49600,16496,24604,8196,12412,4128,6416,2440,3399,1312,1809,18,20
DATA 32768,24576,30720,15872,16256,8160,8184,3968,4032,1760,1648,568,543,14,12,8
' DEFMOUSE pfeil$
'
' Daten für Sprite : CRS$(2,1)
'
crs1$=MKI$(8)+MKI$(8)+MKI$(0)+MKI$(0)+MKI$(1)
FOR i|=1 TO 16
crs1$=crs1$+MKI$(0)
NEXT i|
FOR i|=1 TO 16
READ s%
crs1$=crs1$+MKI$(s%)
NEXT i|
DATA 32766,32766,24582,24582
DATA 24582,24582,24582,24582
DATA 24582,24582,24582,24582
DATA 24582,24582,32766,32766
SWAP pfeil$,crs1$
DEFMOUSE pfeil$
'
RETURN
> PROCEDURE anfang
DEFFILL 1,2,4
PBOX 0,0,639,399
DEFFILL 0
PBOX 99,48,501,351
GRAPHMODE 3
DEFFILL 1,2,8
PBOX 100,49,500,350
DEFTEXT 1,1,0,32
TEXT 120,90,350,"ISE-Software"
DEFTEXT 1,4,0,6
TEXT 120,100,350,"Intelligent - Exclusive - Sinnvoll"
TEXT 120,120,350,"K-H Wallon C.Hörner"
TEXT 120,130,350,"06424/4504 05605/4319"
DEFTEXT 1,0,0,13
TEXT 210,150,200,"presentiert"
DEFTEXT 1,5,0,13
TEXT 150,170,300,"TEXTWRITER ST V 2.4"
DEFTEXT 1,0,0,6
TEXT 200,190,"1989 - Public Domain - 1989"
TEXT 120,205,"verbessert von: Grundprg: TED"
TEXT 120,220," K-H Wallon aus dem Buch"
TEXT 120,230," Leidenhofenerstraße 25 GFA-Basic -"
TEXT 120,240," 3557 Ebsdorfergrund 6 Programmierung"
TEXT 120,250," Tel.0 64 24/45 04 von G.P. Engels"
DRAW 120,260 TO 220,260 TO 170,340 TO 120,260
DRAW 380,260 TO 480,260 TO 430,340 TO 380,260
DEFTEXT 1,0,0,32
TEXT 150,290,"I"
TEXT 410,290,"I"
TEXT 180,290,"E"
TEXT 440,290,"E"
TEXT 165,320,"S"
TEXT 425,320,"S"
PAUSE 10
GRAPHMODE 1
DO
GET 100,50,500,51,t$
RC_COPY XBIOS(3),100,51,400,298 TO XBIOS(3),100,50
PUT 100,348,t$
EXIT IF INKEY$<>""
LOOP
CLR t$
DEFTEXT 1,0,0,13
RETURN
> PROCEDURE zeilenlaenge
LOCAL bild_oben$,zl$,flg!,sp|,zp|,a|
PRINT CHR$(27)+"f";
GET 0,0,639,15,bild_oben$
nr%=oberste%-2+CRSLIN
zp|=CRSLIN
sp|=CRSCOL
PRINT AT(1,1);SPACE$(zlen%);
zlen_nochmal:
PRINT AT(1,1);"Neue Zeilenlänge : "
PRINT AT(20,1);
FORM INPUT 5 AS zl$
IF VAL(zl$)>79
ALERT 3,"Dies Maximale Zeilenlänge|liegt bei 80 Zeichen!",1,"Return",a|
GOTO zlen_nochmal
ELSE
IF VAL(zl$)<zlen%
zlen%=VAL(zl$)
@textformat(1,anzahl_zeilen%)
ENDIF
zlen%=VAL(zl$)
@tableiste
@cl_s
@ausgabe_ab_zeile(nr%)
ENDIF
PUT 0,0,bild_oben$
PRINT CHR$(27)+"e";
CLR bild_oben$
CLR zl$
DEFMOUSE pfeil$
RETURN
' ---------------------------------------------------------------------------
' Menüeinbau
' ---------------------------------------------------------------------------
> PROCEDURE rsc_load
LOCAL rsc$,gef!
CLR rsc$
~RSRC_FREE()
PRINT AT(1,1);" Moment : Ich lade das RSC-File 'TEXTWRIT.RSC' in den Speicher ! Bitte Geduld ! ";
rsc_nochmal:
IF EXIST("TEXTWRIT.RSC")
rsc$="TEXTWRIT.RSC"
ELSE IF EXIST("TEXTEDIT\TEXTWRIT.RSC")
rsc$="TEXTEDIT\TEXTWRIT.RSC"
ELSE IF rsc$=""
ALERT 3,"Das RSC-Files TEXTWRIT.RSC|habe ich nicht gefunden!|Bitte den Namen wählen:",1," Okay ",a|
FILESELECT "\*.RSC",rsc$,rsc$
IF RIGHT$(rsc$,3)<>"RSC"
ALERT 3,"Dies ist kein richtiges|RSC-File",1,"Return",a|
GOTO rsc_nochmal
ENDIF
ENDIF
gef!=RSRC_LOAD(rsc$)
IF NOT gef!
ALERT 2," Was war denn das ?|Ich habe das File nicht|richtig geladen!|Name FALSCH ???",1,"Nochmal|Abbruch",a|
IF a|=1
GOTO rsc_nochmal
ELSE
EDIT
ENDIF
ENDIF
~RSRC_GADDR(0,disk&,r_disk%)
~RSRC_GADDR(0,block&,r_block%)
~RSRC_GADDR(0,arbeit&,r_arbeit%)
~RSRC_GADDR(0,scroll&,r_scroll%)
~RSRC_GADDR(0,einstell&,r_einstell%)
~RSRC_GADDR(0,textattr&,r_textattr%)
~RSRC_GADDR(0,hinlade&,r_hinlade%)
~RSRC_GADDR(0,hinsave&,r_hinsave%)
~RSRC_GADDR(0,hinende&,r_hinende%)
~RSRC_GADDR(0,loeschen&,r_loeschen%)
~RSRC_GADDR(0,dformat&,r_dformat%)
~RSRC_GADDR(0,hindruck&,r_hindruck%)
~RSRC_GADDR(0,bild&,r_bild%)
~RSRC_GADDR(0,ordner&,r_ordner%)
~RSRC_GADDR(0,laufwerk&,r_laufwerk%)
~RSRC_GADDR(0,suchetex&,r_suchetex%)
~RSRC_GADDR(0,erstext&,r_erstext%)
~RSRC_GADDR(0,textform&,r_textform%)
~RSRC_GADDR(0,seitefrm&,r_seitenform%)
DEFMOUSE pfeil$
RETURN
> PROCEDURE rsc_init
LET disk&=0 !RSC_TREE
LET block&=1 !RSC_TREE
LET arbeit&=2 !RSC_TREE
LET scroll&=3 !RSC_TREE
LET einstell&=4 !RSC_TREE
LET textattr&=5 !RSC_TREE
LET hinlade&=6 !RSC_TREE
LET hinsave&=7 !RSC_TREE
LET hinende&=8 !RSC_TREE
LET loeschen&=9 !RSC_TREE
LET dformat&=10 !RSC_TREE
LET hindruck&=11 !RSC_TREE
LET bild&=12 !RSC_TREE
LET ordner&=13 !RSC_TREE
LET laufwerk&=14 !RSC_TREE
LET suchetex&=15 !RSC_TREE
LET erstext&=16 !RSC_TREE
LET textform&=17 !RSC_TREE
LET seitefrm&=18 !RSC_TREE
LET tladen&=2 !Obj in #0
LET tsave&=3 !Obj in #0
LET tsaveas&=4 !Obj in #0
LET tdruck&=5 !Obj in #0
LET neuord&=7 !Obj in #0
LET fileweg&=8 !Obj in #0
LET formdisk&=9 !Obj in #0
LET laufwech&=10 !Obj in #0
LET nameaend&=11 !Obj in #0
LET prgende&=13 !Obj in #0
LET banf&=2 !Obj in #1
LET bende&=3 !Obj in #1
LET bladen&=5 !Obj in #1
LET bsave&=6 !Obj in #1
LET bkopy&=8 !Obj in #1
LET bver&=9 !Obj in #1
LET bloesh&=10 !Obj in #1
LET bdruck&=11 !Obj in #1
LET bmark&=12
LET insert&=2 !Obj in #2
LET owert&=3 !Obj in #2
LET zeinf&=5 !Obj in #2
LET zloesch&=6 !Obj in #2
LET ztrenn&=7 !Obj in #2
LET zjoin&=8 !Obj in #2
LET suche&=10 !Obj in #2
LET ersetze&=11 !Obj in #2
LET nochmal&=12 !Obj in #2
LET texform&=13 !Obj in #2
LET setmar1&=15 !Obj in #2
LET gomar1&=16 !Obj in #2
LET setmar2&=17 !Obj in #2
LET gomar2&=18 !Obj in #2
LET setmar3&=19 !Obj in #2
LET gomar3&=20 !Obj in #2
LET shoch&=2 !Obj in #3
LET srunter&=3 !Obj in #3
LET srechts&=4 !Obj in #3
LET slinks&=5 !Obj in #3
LET zhoch&=6 !Obj in #3
LET zrunter&=7 !Obj in #3
LET seianf&=8 !Obj in #3
LET tanf&=9 !Obj in #3
LET tende&=10 !Obj in #3
LET seiform&=2 !Obj in #4
LET zeiform&=3 !Obj in #4
LET drkform&=4 !Obj in #4
LET drkanp&=5 !Obj in #4
LET ascmod&=6 !Obj in #4
LET twmod&=7 !Obj in #4
LET frei&=8 !Obj in #4
LET trennan&=11 !Obj in #4
LET trennaus&=12 !Obj in #4
LET tgestalt&=13 !Obj in #4
LET atrlinks&=2 !Obj in #5
LET atrrecht&=3 !Obj in #5
LET atrzentr&=4 !Obj in #5
LET atrblock&=5 !Obj in #5
LET sfett&=7 !Obj in #5
LET sunter&=8 !Obj in #5
LET skursiv&=9 !Obj in #5
LET shell&=10 !Obj in #5
LET sscript&=11 !Obj in #5
LET ssup&=12 !Obj in #5
LET endeja&=8 !Obj in #8
LET endenein&=9 !Obj in #8
LET mendisk&=2 !Obj in #12
LET menblock&=3 !Obj in #12
LET menarbei&=4 !Obj in #12
LET menscrol&=5 !Obj in #12
LET menattr&=6 !Obj in #12
LET accs&=7 !Obj in #12
LET meneinst&=8 !Obj in #12
LET edordner&=3 !Obj in #13
LET ordokay&=4 !Obj in #13
LET ordabbr&=5 !Obj in #13
LET sutext&=3 !Obj in #15
LET suabbr&=5 !Obj in #15
LET suokay&=6 !Obj in #15
LET ersutext&=3 !Obj in #16
LET erertext&=5 !Obj in #16
LET ersokay&=7 !Obj in #16
LET ersabbr&=8 !Obj in #16
LET zformat&=7 !Obj in #17
LET aformat&=8 !Obj in #17
LET tformat&=9 !Obj in #17
LET sfrmpl&=4 !Obj in #18
LET sfrmak&=5 !Obj in #18
LET sfrmao&=6 !Obj in #18
LET sfrmau&=7 !Obj in #18
LET sfrmaf&=8 !Obj in #18
LET sfrmdrl&=10 !Obj in #18
LET sfrmkol&=12 !Obj in #18
LET sfrmkom&=13 !Obj in #18
LET sfrmkor&=14 !Obj in #18
LET sfrmful&=15 !Obj in #18
LET sfrmfum&=16 !Obj in #18
LET sfrmfur&=17 !Obj in #18
LET sfrmtab&=19 !Obj in #18
LET sfrmlr&=20 !Obj in #18
LET sfrmrr&=21 !Obj in #18
LET sfrmok&=23 !Obj in #18
LET sfrmabbr&=24 !Obj in #18
RETURN
'
> PROCEDURE menue(f!)
LOCAL sp|,zp|,p|,t$,wahl%
sp|=CRSCOL
zp|=CRSLIN
IF NOT f!
TEXT 1,13,"ESC?"
REPEAT
t$=INKEY$
UNTIL t$<>""
IF LEN(t$)=2
code|=(ASC(RIGHT$(t$)))-58
IF code|>=1 AND code|<=10
IF sp|+LEN(phr$(code|))<zlen%
zeile$(oberste%-2+zp|)=LEFT$(zeile$(oberste%-2+zp|),sp|)+phr$(code|)
PRINT AT(sp|,zp|);phr$(code|);CHR$(27)+"e";
ELSE
ALERT 3,"Der Text der auf dieser|Taste liegt passt nicht mehr|in die Zeile !",1,"Return",a|
DEFMOUSE pfeil$
ENDIF
ENDIF
ENDIF
TEXT 1,13,"Name"
p|=INSTR(menstr$,t$)
IF p|
ON p| GOSUB hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell,hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell
ENDIF
CLR t$
ELSE
'
' Mausklick -> dann auf Menüklick reagieren
'
wahl%=OBJC_FIND(r_bild%,0,7,MOUSEX,MOUSEY)
IF wahl%>=mendisk& AND wahl%<=meneinst&
ON wahl%-1 GOSUB hpdisk,hpblock,hparbeit,hpscroll,hpattribute,hpaccs,hpeinstell
wahl%=0
ENDIF
ENDIF
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Disk
' ----------------------------------------------------------------------------
> PROCEDURE hpdisk
LOCAL mx&,my&,mk|,x&,y&,b&,h&,t$,p|,temp$
~FORM_CENTER(r_disk%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_disk%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
MOUSE mx&,my&,mk|
UNTIL t$<>"" OR mk|=1
IF mk|=1
w%=OBJC_FIND(r_disk%,0,7,mx&,my&)
IF w%>=tladen& AND w%<=prgende&
t$=MID$(diskstr$,w%-1,1)
ENDIF
ENDIF
PUT x&,y&,temp$
SELECT t$
CASE "l","L"
@text_laden
CASE "s","S"
@text_speichern
CASE "a","A"
@text_speichern_als
CASE "p","P"
@text_drucken
CASE "o","O"
@neuer_ordner
CASE "f","F"
@file_weg
CASE "n","N"
@name_aendern
CASE "d","D"
@disk_format
CASE "w","W"
@laufwerk_wechseln
CASE "x","X"
@text_loeschen
CASE "q","Q"
@prg_ende
ENDSELECT
RETURN
> PROCEDURE text_laden
LOCAL x&,y&,b&,h&,temp$,a|,laenge%,id$,anf%,posit%,rest%,durchgaenge%,tabul$,parameter|
LOCAL ladestring$,anz%,p&,wo%
IF anzahl_zeilen%>0
ALERT 3,"Warnung! Das Laden eines neuen|Textes löscht den alten Text.|Wollen Sie das ?",1," Ja | Nein ",a|
DEFMOUSE pfeil$
ELSE
a|=1
ENDIF
IF a|=1
FOR i%=1 TO anzahl_zeilen%
zeile$(i%)=""
NEXT i%
oberste%=0
anzahl_zeilen%=0
block!=FALSE
blockanfang%=0
blockende%=0
ARRAYFILL seiten!(),FALSE
PRINT CHR$(27)+"f"; ! Cursor ausschalten
@cl_s
@head(157,20,472,"Text Laden")
FILESELECT pfad$,"",filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
~FORM_CENTER(r_hinlade%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_hinlade%,0,7,0,0,640,400)
OPEN "I",#1,filename$
laenge%=LOF(#1)
anf%=LOC(#1) ! Startadresse des Textes auf Disk
INPUT #1,id$
IF id$<>"TEXTWRITER ST"
ALERT 1,"Keine TEXTWRITER-Text soll im|Word Plus Modus geladen|werden oder normal ?",1,"Normal| WP ",a|
DEFMOUSE pfeil$
SEEK #1,anf% ! Wenn kein TEXTWRITER-TEXT dann
' ! an den Anfang des Springen und alles Laden
ELSE
INPUT #1,zlen%
INPUT #1,papierlen%
INPUT #1,seitelen%
INPUT #1,lrand%
INPUT #1,rrand%
INPUT #1,aboben%
INPUT #1,abunten%
INPUT #1,kopfob%
INPUT #1,fuss%
INPUT #1,tabulator%
INPUT #1,kopfl$
INPUT #1,kopfm$
INPUT #1,kopfr$
INPUT #1,fussl$
INPUT #1,fussm$
INPUT #1,fussr$
INPUT #1,tabul$
INPUT #1,parameter|
FOR i|=1 TO zlen%
IF MID$(tabul$,i|,1)="1"
tabulator!(i|)=TRUE
ELSE
tabulator!(i|)=FALSE
ENDIF
NEXT i|
FOR i|=1 TO 7
IF BTST(parameter|,i|)
par!(i|)=TRUE
ELSE
par!(i|)=FALSE
ENDIF
NEXT i|
posit%=LOC(#1)
laenge%=laenge%-(posit%-anf%)
ENDIF
OPTION BASE 0
FOR i%=0 TO max_zeilen%-1 STEP seitelen%
seiten!(i%)=TRUE
NEXT i%
FOR i|=0 TO seitelen%-1
seiten!(i|)=FALSE
NEXT i|
OPTION BASE 1
durchgaenge%=INT(laenge%/256)
rest%=laenge% MOD 256
ladestring$=""
anz%=0
i%=0
IF durchgaenge%>0
REPEAT
INC i%
durchgang$=INPUT$(256,#1) ! Hier werden die Bytes gelesen.
IF a|=2
REPEAT
p&=INSTR(p&,durchgang$,CHR$(&H1E))
IF p&
MID$(durchgang$,p&,1)=CHR$(32)
INC p&
ENDIF
UNTIL p&=0
ENDIF
ladestring$=ladestring$+durchgang$
wo%=INSTR(ladestring$,CHR$(10))
WHILE wo%>0 AND anz%<max_zeilen%
INC anz%
zeile$(anz%)=LEFT$(ladestring$,wo%-2) ! vor dem CR
IF LEN(zeile$(anz%))>zlen%
@divide_long_lines(anz%)
ENDIF
ladestring$=MID$(ladestring$,wo%+1) ! nach dem LF
wo%=INSTR(ladestring$,CHR$(10))
WEND
UNTIL i%=durchgaenge% OR anz%>=max_zeilen%
ENDIF
IF rest%>0 AND anz%<max_zeilen%
rest$=INPUT$(rest%,#1)
ladestring$=ladestring$+rest$
wo%=INSTR(ladestring$,CHR$(10))
WHILE wo%>0 AND anz%<max_zeilen%
INC anz%
zeile$(anz%)=LEFT$(ladestring$,wo%-2) ! vor dem CR
IF LEN(zeile$(anz%))>zlen%
@divide_long_lines(anz%)
ENDIF
ladestring$=MID$(ladestring$,wo%+1) ! nach dem LF
wo%=INSTR(ladestring$,CHR$(10))
WEND
ENDIF
IF LEN(ladestring$)>0 AND anz%<max_zeilen%
INC anz%
zeile$(anz%)=ladestring$
IF LEN(zeile$(anz%))>zlen%
@divide_long_lines(anz%)
ENDIF
ENDIF
IF anz%=max_zeilen%
ALERT 1,"Diese Datei ist zu groß, um|vollständig geladen zu werden.",1," Return ",a%
DEFMOUSE pfeil$
anzahl_zeilen%=max_zeilen%-1
ELSE
anzahl_zeilen%=anz%
ENDIF
CLOSE #1
PUT x&,y&,temp$
ENDIF
oberste%=0
block!=FALSE
blockanfang%=0
blockende%=0
ENDIF ! von Ok ohne Filename oder Abbruch
@tableiste
DEFMOUSE pfeil$
@cl_s
PRINT CHR$(27)+"e" ! Cursor einschalten
@ausgabe_ab_zeile(1)
@statuszeile
PRINT AT(1,3);
RETURN
> PROCEDURE text_speichern
LOCAL x&,y&,b&,h&,temp$,sp|,zp|
IF anzahl_zeilen%>0
zp|=CRSLIN
sp|=CRSCOL
PRINT CHR$(27)+"f"; ! Cursor ausschalten
~FORM_CENTER(r_hinsave%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_hinsave%,0,7,0,0,640,400)
IF LEN(filename$)>1 AND RIGHT$(filename$,12)<>"TESTTEXT.TXT"
OPEN "O",#1,filename$
IF tw!=TRUE
PRINT #1,"TEXTWRITER ST"
PRINT #1,zlen%
PRINT #1,papierlen%
PRINT #1,seitelen%
PRINT #1,lrand%
PRINT #1,rrand%
PRINT #1,aboben%
PRINT #1,abunten%
PRINT #1,kopfob%
PRINT #1,fuss%
PRINT #1,tabulator%
PRINT #1,kopfl$
PRINT #1,kopfm$
PRINT #1,kopfr$
PRINT #1,fussl$
PRINT #1,fussm$
PRINT #1,fussr$
FOR i|=1 TO zlen%
IF tabulator!(i|)
tabul$=tabul$+"1"
ELSE
tabul$=tabul$+"0"
ENDIF
NEXT i|
PRINT #1,tabul$
FOR i|=1 TO 7
IF par!(i|)
parameter|=BSET(parameter|,i|)
ELSE
parameter|=BCLR(parameter|,i|)
ENDIF
NEXT i|
PRINT #1,parameter|
ENDIF
FOR i%=1 TO anzahl_zeilen%
IF asc!
IF RIGHT$(zeile$(i%))=CHR$(174)
zeile$(i%)=LEFT$(zeile$(i%),LEN(zeile$(i%))-1)
ENDIF
ENDIF
PRINT #1,zeile$(i%)
NEXT i%
CLOSE #1
ELSE
ALERT 1,"Ich habe keinen Filenamen|TESTTEXT.TXT ist doch blöd!|Bitte mit ESC-D-A speichern!",1," Return ",a|
ENDIF
PUT x&,y&,temp$
@cl_s
PRINT CHR$(27)+"e" ! Cursor einschalten
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(sp|,zp|);
@statuszeile
ELSE
ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a%
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE text_speichern_als
LOCAL x&,y&,b&,h&,temp$,sp|,zp|
IF anzahl_zeilen%>0
zp|=CRSLIN
sp|=CRSCOL
PRINT CHR$(27)+"f"; ! Cursor ausschalten
@cl_s
@head(157,20,472,"Text Speichern")
FILESELECT pfad$,filename$,filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
@text_speichern
ENDIF
ELSE
ALERT 1,"Es ist noch kein Text für|eine Speicherung verfügbar !",1," Return ",a%
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE text_drucken
LOCAL x&,y&,b&,h&,temp$
IF anzahl_zeilen%>0
ALERT 2,"Wollen Sie den aktuellen|Text ausdrucken ?",1," Ja | Nein ",a%
DEFMOUSE pfeil$
IF a%=1
~FORM_CENTER(r_hindruck%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_hindruck%,0,7,0,0,640,400)
TEXT 225,224,"1"
@drucken(1,anzahl_zeilen%)
PUT x&,y&,temp$
ENDIF
ENDIF
RETURN
> PROCEDURE text_loeschen
IF anzahl_zeilen%>0
ALERT 3,"Wollen Sie den aktuellen|Text wirklich löschen ?",1," Ja | Nein ",a|
IF a|=1
PRINT CHR$(27)+"f";
ERASE zeile$()
DIM zeile$(max_zeilen%)
oberste%=0
anzahl_zeilen%=0
block!=FALSE
blockanfang%=0
blockende%=0
filename$="TESTTEXT.TXT"
zlen%=79
papierlen%=66
seitelen%=58
lrand%=1
aboben%=3
tabulator%=5
ARRAYFILL tabulator!(),FALSE
FOR i|=1 TO zlen% STEP tabulator%
tabulator!(i|)=TRUE
NEXT i|
tabulator!(1)=FALSE
@cl_s
@statuszeile
ENDIF
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE neuer_ordner
LOCAL x&,y&,b&,h&,temp$,exit%,p|,ph$,ordner$
FILESELECT "\*.*",ph$,ph$
IF ph$<>"" AND LEN(ph$)>1
ALERT 3,"Nur der Pathname zählt!|Der Dateiname wird vergessen!",1," Okay ",a|
DEFMOUSE pfeil$
p|=RINSTR(ph$,"\")
ph$=LEFT$(ph$,p|)
ENDIF
CHAR{{OB_SPEC(r_ordner%,edordner&)}}=ordner$
~FORM_CENTER(r_ordner%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_ordner%,0,7,0,0,640,400)
exit%=FORM_DO(r_ordner%,edordner&)
~OBJC_CHANGE(r_ordner%,exit%,0,x&,y&,b&,h&,0,0)
ordner$=CHAR{{OB_SPEC(r_ordner%,edordner&)}}
PUT x&,y&,temp$
IF exit%=ordokay&
ALERT 1,"Der Ordner :"+ordner$+"|im Phat :"+ph$+"|wird angelegt !|Bitte warten!",1," Okay | Abbruch ",a|
DEFMOUSE pfeil$
IF a|=1
MKDIR ph$+ordner$
ENDIF
ENDIF
RETURN
> PROCEDURE file_weg
LOCAL x&,y&,b&,h&,temp$,exit%,ph$,ordner$
FILESELECT "\*.*",ph$,ph$
IF ph$<>"" AND LEN(ph$)>1
ALERT 3,"Soll das File :|"+ph$+"|wirklich gelöscht werden ?",2," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
~FORM_CENTER(r_loeschen%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_loeschen%,0,7,0,0,640,400)
KILL ph$
PUT x&,y&,temp$
ENDIF
ENDIF
RETURN
> PROCEDURE disk_format
LOCAL x&,y&,b&,h&,sp|,zp|,nr%,temp$,la|
sp|=CRSCOL
zp|=CRSLIN
nr%=oberste%-2+CRSLIN
PRINT CHR$(27)+"f";
ALERT 2,"Welches Laufwerk möchtest|du Formatieren ?",1," A | B | Keins",la|
DEFMOUSE pfeil$
IF la|<3
okay!=FALSE
~FORM_CENTER(r_dformat%,x&,y&,b&,h&)
~OBJC_DRAW(r_dformat%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
IF UPPER$(t$)="E"
seiten|=1
med|=248
ALERT 3,"Formatieren löscht alle Daten auf|der Diskette rettungslos!| Wirklich Formatieren ?",2," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
@up.format(1,seiten|,80,9,5,112,med|)
okay!=TRUE
ENDIF
ELSE IF UPPER$(t$)="D"
seiten|=2
med|=249
ALERT 3,"Formatieren löscht alle Daten auf|der Diskette rettungslos!| Wirklich Formatieren ?",2," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
@up.format(1,seiten|,80,9,5,112,med|)
okay!=TRUE
ENDIF
ENDIF
UNTIL okay!
ENDIF
CLS
@statuszeile
@menueleiste
@ausgabe_ab_zeile(nr%)
PRINT CHR$(27)+"e";
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE up.format(drv%,sid%,trk%,spt%,fat%,dir%,med%)
buf$=SPACE$(10000)
VOID FRE(0)
buf%=VARPTR(buf$)
FOR t%=0 TO trk%-1
FOR s%=0 TO sid%-1
e%=XBIOS(10,L:buf%,L:0,drv%,spt%,t%,s%,1,L:&H87654321,0)
IF e%
PRINT
PRINT "Seite ";s%," spur ";t%;" Fehler ";e%;" Sektor ";
b%=buf%
WHILE DPEEK(b%)
PRINT DPEEK(b%)'
ADD b%,2
WEND
ELSE
OUT 5,42
ENDIF
NEXT s%
NEXT t%
sec%=trk%*spt%*sid%
buf$=STRING$(6,0)+MKL$(XBIOS(17))+CHR$(0)+MKI$(2)+CHR$(2)
buf$=buf$+MKI$(&H100)+CHR$(2)+CHR$(dir%)+CHR$(dir%/256)
buf$=buf$+CHR$(sec%)+CHR$(sec%/256)+CHR$(med%)
buf$=buf$+MKI$(fat%*256)+MKI$(spt%*256)+MKI$(sid%*256)
buf$=buf$+MKI$(0)+STRING$(512,0)
VOID XBIOS(9,L:VARPTR(buf$),L:o#,drv%,0,0,1)
VOID BIOS(7,drv%)
buf$=MKL$(&HF7FFFF00)+STRING$(508,0)
VOID BIOS(4,1,L:VARPTR(buf$),1,1,drv%)
VOID BIOS(4,1,L:VARPTR(buf$),1,fat%+1,drv%)
PRINT
PRINT DFREE(drv%+1);" Bytes frei"
RETURN
> PROCEDURE name_aendern
LOCAL x&,y&,b&,h&,temp$,exit%,ph$,n_ame$
CHAR{{OB_SPEC(r_ordner%,edordner&)}}=n_ame$
~FORM_CENTER(r_ordner%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_ordner%,0,7,0,0,640,400)
TEXT 234,190,"Neuer Textname "
exit%=FORM_DO(r_ordner%,edordner&)
n_ame$=CHAR{{OB_SPEC(r_ordner%,edordner&)}}
~OBJC_CHANGE(r_ordner%,exit%,0,x&,y&,b&,h&,0,0)
PUT x&,y&,temp$
IF exit%=ordokay& AND n_ame$<>""
IF LEN(n_ame$)>8
filename$=LEFT$(n_ame$,8)+"."+RIGHT$(n_ame$,3)
ELSE
filename$=n_ame$+".TXT"
ENDIF
@statuszeile
ENDIF
RETURN
> PROCEDURE laufwerk_wechseln
LOCAL x&,y&,b&,h&,temp$,laufw|,t$,wahl|
~FORM_CENTER(r_laufwerk%,x&,y&,b&,h&)
~OBJC_DRAW(r_laufwerk%,0,7,x&,y&,b&,h&)
laufw|=BIOS(10)
REPEAT
t$=INKEY$
SELECT t$
CASE "a","A"
wahl|=0
CASE "b","B"
wahl|=1
CASE "c","C"
wahl|=2
CASE "d","D"
wahl|=3
CASE "e","E"
wahl|=4
CASE "f","F"
wahl|=5
ENDSELECT
UNTIL BTST(laufw|,wahl|) !nur ende wenn Laufwerk angeschloßen ist
CHDRIVE wahl|+1
pfad$=CHR$(65+wahl|)+":\*"
CHDIR CHR$(65+wahl|)+":\"
PUT x&,y&,temp$
CLR temp$
RETURN
> PROCEDURE prg_ende
LOCAL sp|,zp|,x&,y&,b&,h&,temp$,w%
sp|=CRSCOL
zp|=CRSLIN
DEFMOUSE crs1$
~FORM_CENTER(r_hinende%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_hinende%,0,7,0,0,640,400)
REPEAT
MOUSE mx&,my&,mk|
IF mk| OR INKEY$=CHR$(13)
w%=OBJC_FIND(r_hinende%,0,7,mx&,my&)
IF w%=endeja& OR INKEY$=CHR$(13)
PRINT CHR$(27)+"f"; ! Cursor ausschalten
PRINT CHR$(27)+"q"; ! reverse Schrift aus
@anfang
SETCOLOR 0,7,7,7
EDIT
ENDIF
ENDIF
UNTIL w%=endenein&
w%=0
PUT x&,y&,temp$
WHILE MOUSEK=0
WEND
DEFMOUSE pfeil$
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Block
' ----------------------------------------------------------------------------
> PROCEDURE hpblock
LOCAL w%,mx&,my&,mk|,x&,y&,b&,h&,t$,p|,temp$
~FORM_CENTER(r_block%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_block%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
MOUSE mx&,my&,mk|
UNTIL t$<>"" OR mk|=1
PUT x&,y&,temp$
IF mk|=1
w%=OBJC_FIND(r_block%,0,7,mx&,my&)
IF w%>=banf& AND w%<=bmark&
t$=MID$(blockstr$,w%-1,1)
ENDIF
ENDIF
SELECT t$
CASE "a","A"
@block_anfang
CASE "e","E"
@block_ende
CASE "l","L"
@block_laden
CASE "s","S"
@block_speichern
CASE "k","K"
@block_kopieren
CASE "v","V"
@block_verschieben
CASE "d","D"
@block_loeschen
CASE "p","P"
@block_drucken
CASE "m","M"
@block_markierung
ENDSELECT
RETURN
> PROCEDURE block_anfang
LOCAL sp|,zp|
IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
vorher!=block!
blockanfang%=(oberste%-2)+CRSLIN
IF blockende%>=blockanfang%
block!=TRUE
ELSE
block!=FALSE
ENDIF
ENDIF
zp|=CRSLIN
sp|=CRSCOL
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE block_ende
LOCAL sp|,zp|
IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
vorher!=block!
blockende%=(oberste%-2)+CRSLIN
IF blockende%>=blockanfang%
block!=TRUE
ELSE
block!=FALSE
ENDIF
ENDIF
zp|=CRSLIN
sp|=CRSCOL
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE block_kopieren
LOCAL an_zeile%
IF block!
an_zeile%=(oberste%-2)+CRSLIN
IF an_zeile%<=anzahl_zeilen%+1
IF anzahl_zeilen%+blocklaenge%<=max_zeilen%
blocklaenge%=blockende%-blockanfang%
FOR i&=0 TO blocklaenge% ! Testen wo eingefügt wird vor oder hinter pos
INSERT zeile$(an_zeile%+i&)=zeile$(i&+blockanfang%)
NEXT i&
ADD anzahl_zeilen%,blocklaenge%
@ausgabe_ab_zeile(oberste%+1)
ELSE
ALERT 1,"Der Speicherplatz reicht|dafür nicht aus.",1," Return ",a%
DEFMOUSE pfeil$
ENDIF
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
ENDIF
RETURN
> PROCEDURE block_verschieben
LOCAL an_zeile%
zei_pos|=oberste%-2+CRSLIN
IF block!
IF (oberste%-2)+CRSLIN<blockanfang% OR (oberste%-2)+CRSLIN>blockende%
an_zeile%=(oberste%-2)+CRSLIN
IF an_zeile%<=anzahl_zeilen%+1
IF anzahl_zeilen%+blocklaenge%<=max_zeilen%
blocklaenge%=blockende%-blockanfang%
FOR i&=1 TO blocklaenge% ! Testen wo eingefügt wird vor oder hinter pos
IF blockanfang%<an_zeile%
INSERT zeile$(an_zeile%)=zeile$(blockanfang%)
DELETE zeile$(blockanfang%)
ELSE
INSERT zeile$(an_zeile%+i&)=zeile$(blockanfang%)
DELETE zeile$(blockanfang&)
ENDIF
NEXT i&
@ausgabe_ab_zeile(oberste%+1)
blockanfang%=an_zeile%
blockende%=blockanfang%+blocklaenge%
ENDIF
ENDIF
ELSE
ALERT 1,"Cursor im Block !! |Das geth aber wirklich nicht !",1,"Return ",a%
DEFMOUSE pfeil$
ENDIF
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
RETURN
> PROCEDURE block_speichern
LOCAL sp|,zp|
IF block!
zp|=CRSLIN
sp|=CRSCOL
PRINT CHR$(27)+"f"; ! Cursor abschalten
@cl_s
FILESELECT pfad$,"",filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
OPEN "O",#1,filename$
FOR i%=blockanfang% TO blockende%
PRINT #1,zeile$(i%)
NEXT i%
CLOSE #1
ENDIF
@cl_s
PRINT CHR$(27)+"e" ! Cursor einschalten
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(sp|,zp|);
ELSE
ALERT 1,"Es ist noch kein Block für|eine Speicherung verfügbar !",1," Return ",a%
DEFMOUSE pfeil$
ENDIF
DEFMOUSE pfeil$
RETURN
> PROCEDURE block_laden
LOCAL zp|,laden_an%,anzeile%
zp|=CRSLIN
PRINT CHR$(27)+"f"; ! Cursor ausschalten
@cl_s
FILESELECT pfad$,"",filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
laden_an%=anzahl_zeilen%+1
OPEN "I",#1,filename$
REPEAT
LINE INPUT #1,dummy$(laden_an%)
INC laden_an%
UNTIL EOF(#1) OR laden_an%=max_zeilen%
CLOSE #1
blocklaenge%=laden_an%-anzahl_zeilen%-1
IF laden_an%=max_zeilen%
ALERT 1,"Diese Datei ist zu groß, um|vollständig geladen zu werden.",1," Return ",a%
DEFMOUSE pfeil$
ELSE
anzeile%=oberste%-2+CRSLIN
block!=TRUE
blockanfang%=anzeile%
blockende%=blockanfang%+blocklaenge%-1
FOR i%=1 TO blocklaenge%
INSERT zeile$(anzeile%+i%)=dummy$(i%)
NEXT i%
oberste%=blockanfang%-1
ADD anzahl_zeilen%,blocklaenge%
ENDIF
ENDIF
PRINT CHR$(27)+"e"; ! Cursor einschalten
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(1,3);
DEFMOUSE pfeil$
RETURN
> PROCEDURE block_drucken
LOCAL x&,y&,b&,h&,temp$,a|
IF block!
ALERT 2,"Willst du den aktuellen|Block ausdrucken ?",1," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
~FORM_CENTER(r_hindruck%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_hindruck%,0,7,0,0,640,400)
TEXT 225,224,"1"
@drucken(blockanfang%,blockende%)
ENDIF
ENDIF
RETURN
> PROCEDURE block_loeschen
LOCAL x&,y&,b&,h&,temp$,oben%,a|
oben%=oberste%-2+CRSLIN
IF block!
ALERT 3,"Soll der Block wirklich|restlos gelöscht werden ?",1," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
~FORM_CENTER(r_loeschen%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_loeschen%,0,7,0,0,640,400)
blocklaenge%=blockende%-blockanfang%+1
FOR i%=1 TO blocklaenge%
DELETE zeile$(blockanfang%)
NEXT i%
SUB anzahl_zeilen%,blocklaenge%
block!=FALSE
oberste%=blockanfang%
blockanfang%=0
blockende%=0
blocklaenge%=0
block!=FALSE
PRINT CHR$(27)+"q"; ! reverse Schrift aus
PUT x&,y&,temp$
@ausgabe_ab_zeile(oberste%+1)
PRINT AT(1,3);
ENDIF
ENDIF
RETURN
> PROCEDURE block_markierung
IF block!
block!=FALSE
PRINT CHR$(27)+"q";
IF oberste%+24>=blockanfang% AND oberste%<=blockende%
@ausgabe_ab_zeile(oberste%+1)
ENDIF
blockanfang%=0
blockende%=0
@statuszeile
ENDIF
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Arbeit
' ----------------------------------------------------------------------------
> PROCEDURE hparbeit
LOCAL x&,y&,b&,h&,t$,p|,temp$
~FORM_CENTER(r_arbeit%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_arbeit%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
MOUSE mx&,my&,mk|
UNTIL t$<>"" OR mk|=1
PUT x&,y&,temp$
IF mk|=1
w%=OBJC_FIND(r_arbeit%,0,7,mx&,my&)
' insert gomar3
IF w%>=insert& AND w%<=gomar3&
t$=MID$(arbstr$,w%-1,1)
ENDIF
ENDIF
PUT x&,y&,temp$
SELECT t$
CASE "i","I"
@arbeit_insert
CASE "u","U"
@arbeit_owert
CASE "s","S"
@arbeit_finde
CASE "e","E"
@arbeit_ersetze
CASE "z","Z"
@zeile_einfuegen
CASE "d","D"
@zeile_loeschen
CASE "t","T"
@zeile_trennen
CASE "p","P"
@pharsen
CASE "n","N"
@nochmal
CASE "f","F"
@text_format
CASE "1"
@setze_marke(1)
CASE "2"
@setze_marke(2)
CASE "3"
@setze_marke(3)
CASE 33
@springe_marke(1)
CASE 34
@springe_marke(2)
CASE 35
@springe_marke(3)
ENDSELECT
RETURN
> PROCEDURE arbeit_finde
LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%
sp|=CRSCOL
zp|=CRSLIN
DEFMOUSE crs1$
CHAR{{OB_SPEC(r_suchetex%,sutext&)}}=suchstring$
~FORM_CENTER(r_suchetex%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_suchetex%,0,7,0,0,640,400)
exit%=FORM_DO(r_suchetex%,sutext&)
suchstring$=CHAR{{OB_SPEC(r_suchetex%,sutext&)}}
~OBJC_CHANGE(r_suchetex%,exit%,0,x&,y&,b&,h&,0,0)
PUT x&,y&,temp$
IF exit%=suokay& AND suchstring$<>""
@suchen_ab(oberste%+1)
suche!=TRUE
ELSE
PRINT AT(sp|,zp|);CHR$(7);
ENDIF
DEFMOUSE pfeil$
@statuszeile
RETURN
> PROCEDURE arbeit_ersetze
LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%
sp|=CRSCOL
zp|=CRSLIN
DEFMOUSE crs1$
CHAR{{OB_SPEC(r_erstext%,erertext&)}}=ersatzstring$
CHAR{{OB_SPEC(r_erstext%,ersutext&)}}=suchstring$
~FORM_CENTER(r_erstext%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_erstext%,0,7,0,0,640,400)
exit%=FORM_DO(r_erstext%,ersutext&)
suchstring$=CHAR{{OB_SPEC(r_erstext%,ersutext&)}}
ersatzstring$=CHAR{{OB_SPEC(r_erstext%,erertext&)}}
~OBJC_CHANGE(r_erstext%,exit%,0,x&,y&,b&,h&,0,0)
PUT x&,y&,temp$
IF exit%=ersokay& AND suchstring$<>"" AND ersatzstring$<>""
@ersetzen_ab(oberste%+zp|+1)
suche!=FALSE
ELSE
PRINT AT(sp|,zp|);CHR$(7);
ENDIF
DEFMOUSE pfeil$
@statuszeile
RETURN
> PROCEDURE arbeit_insert
LOCAL sp|,zp|
zp|=CRSLIN
sp|=CRSCOL
insertmode!=TRUE
PRINT AT(21,1);"I"
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE arbeit_owert
LOCAL sp|,zp|
zp|=CRSLIN
sp|=CRSCOL
insertmode!=FALSE
PRINT AT(21,1);"O"
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE zeile_einfuegen
LOCAL sp|,zp|
IF anzahl_zeilen%<max_zeilen% AND anzahl_zeilen%>=(oberste%-2)+CRSLIN
PRINT CHR$(27)+"L"; ! Bildschirm ab Cursor eine Zeile runter schieben
@menueleiste
INC anzahl_zeilen%
sp|=CRSCOL
zp|=CRSLIN
nr%=(oberste%-2)+zp|
INSERT zeile$(nr%)=""
IF block!
IF (oberste%-2)+CRSLIN<=blockanfang%
INC blockanfang%
ENDIF
IF (oberste%-2)+CRSLIN<=blockende%
INC blockende%
ENDIF
ENDIF
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
RETURN
> PROCEDURE zeile_loeschen
LOCAL sp|,zp|
IF (oberste%-2)+CRSLIN<=anzahl_zeilen%
zp|=CRSLIN
sp|=CRSCOL
PRINT CHR$(27)+"M"; ! Bildschirm hochschieben
IF block!
IF oberste%+23>=blockanfang% AND oberste%+23<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT AT(1,24);CHR$(27)+"K";
@menueleiste
PRINT AT(1,24);zeile$(oberste%+23);
PRINT AT(sp|,zp|);
DELETE zeile$((oberste%-2)+CRSLIN)
DEC anzahl_zeilen%
ELSE
PRINT CHR$(7); ! Fehlerglocke falls Cursor hinter Text
ENDIF
RETURN
> PROCEDURE pharsen
LOCAL x%,y%,k%,cc$,sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
PRINT CHR$(27)+"f";
GET 14,90,594+16,325,cc$
DEFFILL 1,1,1
PBOX 18,94,594+16,325
DEFFILL 1,0,0
PBOX 14,90,590+16,321
BOX 17,93,587+16,318
@head(32,102,584,"Phrasen")
DEFTEXT 1,0,0,6
TEXT 288,309,"Zurück"
TEXT 188,309,"Laden"
TEXT 378,309,"Speichern"
DEFTEXT 1,0,0,13
BOX 260,296,360,314
BOX 261,297,359,313
BOX 160,296,260,314
BOX 161,297,259,313
BOX 360,296,460,314
BOX 361,297,459,313
FOR i%=1 TO 10
PRINT AT(5,8+i%);"F"+STR$(i%,2);": "
PRINT AT(10,8+i%);phr$(i%)
NEXT i%
DO
REPEAT
MOUSE x%,y%,k%
IF k%=1 AND (x%>160 AND x%<259 AND y%>297 AND y%<313)
@pharsen_laden
ENDIF
IF k%=1 AND (x%>360 AND x%<460 AND y%>297 AND y%<313)
@pharsen_speichern
ENDIF
ty%=(y%-128)/16+1
IF (ty%<1 OR ty%>10)
IF tya%>0
PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+": "
PRINT AT(10,8+tya%);phr$(tya%)
ENDIF
tya%=0
ELSE
IF tya%<>ty% AND ty%>0 AND ty%<11
IF tya%>0
PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+": "
PRINT AT(10,8+tya%);phr$(tya%)
ENDIF
tya%=ty%
PRINT AT(5,8+tya%);CHR$(27)+"p"+"F"+STR$(tya%,2);": "
PRINT AT(10,8+tya%);phr$(tya%)+CHR$(27)+"q"
ENDIF
ENDIF
UNTIL k% AND ty%>0 AND ty%<13
EXIT IF x%>261 AND y%>297 AND x%<359 AND y%<313
IF ty%>0 AND ty%<11
PRINT AT(5,8+tya%);"F"+STR$(tya%,2)+": "
PRINT AT(10,8+tya%);phr$(tya%)
PRINT AT(10,8+ty%);
FORM INPUT 63 AS phr$(ty%)
ENDIF
LOOP
PUT 14,90,cc$
CLR tya%,ty%
PRINT AT(sp|,zp|);CHR$(27)+"e";
RETURN
> PROCEDURE pharsen_laden
LOCAL temp$
GET 155,15,480,40,temp$
@head(157,20,472,"Pharsen Laden")
FILESELECT "*.PHR","",filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
OPEN "I",#3,filename$
FOR i|=1 TO 10
LINE INPUT #3,phr$(i|)
NEXT i|
CLOSE #3
ENDIF
PUT 155,15,temp$
FOR i%=1 TO 10
PRINT AT(5,8+i%);"F"+STR$(i%,2);": "
PRINT AT(10,8+i%);phr$(i%)
NEXT i%
RETURN
> PROCEDURE pharsen_speichern
GET 155,15,480,40,temp$
@head(157,20,472,"Pharsen Speichern")
FILESELECT "*.PHR","",filename$
@pfad_merken
IF NOT (RIGHT$(filename$)="\" OR filename$="")
OPEN "O",#3,filename$
FOR i|=1 TO 10
PRINT #3,phr$(i|)
NEXT i|
CLOSE #3
ENDIF
PUT 155,15,temp$
RETURN
> PROCEDURE zeile_trennen
LOCAL sp|,zp|,laenge|,stehen_bleibt$,abschneiden$
sp|=CRSCOL
zp|=CRSLIN
nr%=(oberste%-2)+CRSLIN
laenge|=LEN(zeile$(nr%))
IF nr%=<anzahl_zeilen% AND CRSCOL<=laenge% AND anzahl_zeilen%<max_zeilen%
stehen_bleibt$=LEFT$(zeile$(nr%),CRSCOL-1)
abschneiden$=MID$(zeile$(nr%),CRSCOL)
PRINT CHR$(27)+"K"; ! Zeile ab Cursor löschen
IF CRSLIN<24
PRINT AT(1,CRSLIN+1);CHR$(27)+"L"; ! Bildschirm ab Cursor nach unten
PRINT AT(1,CRSLIN);abschneiden$;
@menueleiste
ENDIF
zeile$(nr%)=stehen_bleibt$
INSERT zeile$(nr%+1)=abschneiden$
INC anzahl_zeilen%
PRINT AT(1,CRSLIN);
ELSE
PRINT CHR$(7); ! Fehlerglocke
ENDIF
RETURN
> PROCEDURE zeile_join
LOCAL sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
IF (oberste%-2)+CRSLIN<anzahl_zeilen%
nr%=(oberste%-2)+CRSLIN
IF LEN(zeile$(nr%))+LEN(zeile$(nr%+1))<zlen%
zeile$(nr%)=zeile$(nr%)+zeile$(nr%+1)
PRINT AT(1,zp|);zeile$(nr%);
DELETE zeile$(nr%+1)
PRINT AT(1,zp|+1);CHR$(27)+"M"; ! Bildschirm hochschieben
IF block!
IF i%>=blockanfang% AND i%<=blockende%
PRINT CHR$(27)+"p"; ! revers on
ELSE
PRINT CHR$(27)+"q"; ! revers off
ENDIF
ENDIF
PRINT AT(1,24);CHR$(27)+"K";
@menueleiste
PRINT AT(1,24);zeile$(oberste%+23);
DEC anzahl_zeilen%
ELSE
ENDIF
ELSE
PRINT CHR$(7); ! Fehlerglocke falls Cursor hinter Text
ENDIF
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE nochmal
IF suche!
@suchen_ab(oberste%-2+CRSLIN+1)
ELSE
@ersetzen_ab(oberste%-2+CRSLIN+1)
ENDIF
RETURN
> PROCEDURE text_format
LOCAL x&,y&,b&,h&,t$,p%,temp$,sp|,zp|
~FORM_CENTER(r_textform%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_textform%,0,7,0,0,640,400)
sp|=CRSCOL
zp|=CRSLIN
REPEAT
t$=INKEY$
UNTIL t$<>""
PUT x&,y&,temp$
SELECT t$
CASE "z","Z"
@textformat(nr%,nr%)
CASE "a","A"
CLR p%
nr%=oberste%-2+CRSLIN
FOR i%=nr% TO anzahl_zeilen%
IF RIGHT$(zeile$(i%))=CHR$(174)
p%=i%
ENDIF
EXIT IF p%>0
NEXT i%
@textformat(nr%,p%)
CASE "t","T"
@textformat(1,anzahl_zeilen%)
ENDSELECT
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE setze_marke(nr|)
LOCAL sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
nr%=oberste%-2+CRSLIN
marke%(nr|)=nr%
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE springe_marke(nr|)
IF marke%(nr|)>0
oberste%=marke%(nr|)
@ausgabe_ab_zeile(oberste%)
ENDIF
PRINT AT(1,3);
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Scroll
' ----------------------------------------------------------------------------
> PROCEDURE hpscroll
LOCAL x&,y&,b&,h&,t$,p|,temp$,um|,sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
~FORM_CENTER(r_scroll%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_scroll%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
UNTIL t$<>""
PUT x&,y&,temp$
um|=BIOS(11,-1) AND 16
t$=RIGHT$(t$)
IF um|=16
IF t$=CHR$(&H48) ! Seite Hoch
@page_up
ELSE IF t$=CHR$(&H50) ! Seite Runter
@page_down
ELSE IF t$=CHR$(&H4B) ! Seite rechts
ELSE IF t$=CHR$(&H4D) ! Seite links
ELSE IF t$=CHR$(&H47) ! Textanfang
@text_anfang
ENDIF
ELSE IF t$=CHR$(&H48) ! Zeile hoch
anz%=oberste%-2+CRSLIN
anzahl_zeilen%=MAX(anz%,anzahl_zeilen%)
IF CRSLIN=24
@scroll_rauf
ELSE
PRINT CHR$(27)+"B";
ENDIF
ELSE IF t$=CHR$(&H50) ! Zeile runter
IF CRSLIN=3
@scroll_runter
ELSE
PRINT CHR$(27)+"A";
ENDIF
ELSE IF t$=CHR$(&H47) ! seitenanfang
PRINT AT(1,3);
ELSE
PRINT AT(sp|,zp|);
ENDIF
RETURN
> PROCEDURE text_anfang
IF oberste%>0
PRINT CHR$(27)+"f";
oberste%=0
@ausgabe_ab_zeile(1)
PRINT AT(1,3);
ENDIF
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Attribute
' ----------------------------------------------------------------------------
> PROCEDURE hpattribute
LOCAL x&,y&,b&,h&,t$,p|,temp$,sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
PRINT CHR$(27)+"f";
~FORM_CENTER(r_textattr%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_textattr%,0,7,0,0,640,400)
REPEAT
t$=INKEY$
UNTIL t$<>""
PUT x&,y&,temp$
IF LEN(t$)=2
t|=ASC(RIGHT$(t$))
IF t|=&H3F
t$="F5"
ELSE IF t|=&H40
t$="F6"
ELSE IF t|=&H41
t$="F7"
ELSE IF t|=&H42
t$="F8"
ENDIF
ENDIF
SELECT t$
CASE "l","L","F5"
links!=TRUE
rechts!=FALSE
blocksatz!=FALSE
zentre!=FALSE
PRINT AT(27,1);"Links "
CASE "r","R","F6"
links!=FALSE
rechts!=TRUE
blocksatz!=FALSE
zentre!=FALSE
PRINT AT(27,1);"Recht "
CASE "z","Z","F7"
links!=FALSE
rechts!=FALSE
blocksatz!=FALSE
zentre!=TRUE
PRINT AT(27,1);"Zentr "
CASE "b","B","F8"
links!=FALSE
rechts!=FALSE
blocksatz!=TRUE
zentre!=FALSE
PRINT AT(27,1);"Blocks"
CASE "f","F"
CASE "u","U"
CASE "k","K"
CASE "h","H"
CASE "s","S"
CASE "p","P"
ENDSELECT
PRINT CHR$(27)+"e";
PRINT AT(sp|,zp|);
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm ACC'S
' ----------------------------------------------------------------------------
> PROCEDURE hpaccs
LOCAL bild$,raus!
SGET bild$
DIM me$(14)
menuedata:
DATA ACC's, Bitte ein ACC , anklicken ,1,2,3,4,5,6,""
DATA Ende,Zurück,"",""
OPTION BASE 0
RESTORE menuedata
FOR i|=0 TO 13
READ me$(i|)
NEXT i|
OPENW 0
CLS
MENU me$()
ON MENU GOSUB menarbeit
DO
ON MENU
EXIT IF raus!=TRUE
LOOP
ERASE me$()
raus!=FALSE
OPTION BASE 1
CLOSEW 0
CLS
SPUT bild$
DEFMOUSE pfeil$
RETURN
> PROCEDURE menarbeit
LOCAL w%
w%=MENU(0)
IF w%=11
raus!=TRUE
ENDIF
RETURN
' ----------------------------------------------------------------------------
' Hauptprogramm Einstellung
' ----------------------------------------------------------------------------
> PROCEDURE hpeinstell
LOCAL x&,y&,b&,h&,t$,p|,temp$
~FORM_CENTER(r_einstell%,x&,y&,b&,h&)
GET x&,y&,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_einstell%,0,7,0,0,640,400)
REPEAT
MOUSE mx&,my&,mk|
t$=INKEY$
UNTIL t$<>"" OR mk|
IF mk|
w%=OBJC_FIND(r_einstell%,0,7,mx&,my&)
IF w%>=seiform& AND w%<=tgestalt&
t$=MID$(einstr$,w%-1,1)
ENDIF
ENDIF
PUT x&,y&,temp$
SELECT t$
CASE "s","S"
@seitenformat
CASE "z","Z"
@zeilenlaenge
CASE "d","D"
GET 117,58,521,360,temp1$
@einstellung_grafik
@einstellung_select
PUT 117,58,temp1$
CASE "h","H"
@cl_s
PRINT CHR$(27)+"f";
PRINT AT(1,3);"Einstellen des Druckertreibers :"
PRINT AT(1,4);"ELITE = 27 , 77 :";
INPUT "",esc|,code|
elite$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,5);"PICA = 27 , 80 :";
INPUT "",esc|,code|
pica$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,6);"NLO-Ein = 27 , 120 , 49 :";
INPUT "",esc|,code|,mod|
nlq$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
PRINT AT(1,7);"NLQ-Aus = 27 , 120 , 48 :";
INPUT "",esc|,code|,mod|
nlqaus$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
PRINT AT(1,8);"Schmalschrift an = 27 , 15 :";
INPUT "",esc|,code|
schmal$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,9);"Schmalschrift aus = 18 :";
INPUT "",code|
schmalaus$=CHR$(code|)
PRINT AT(1,10);"Proportional an = 27 , 112 , 49 :";
INPUT "",esc|,code|,mod|
prop$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
PRINT AT(1,11);"Proportional aus = 27 , 112 , 48 :";
INPUT "",esc|,code|,mod|
propaus$=CHR$(esc|)+CHR$(code|)+CHR$(mod|)
PRINT AT(1,12);"Kursiv ein = 27 , 52 :";
INPUT "",esc|,code|
kur$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,13);"Kursiv aus = 27 , 53 :";
INPUT "",esc|,code|
kuraus$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,14);"Doppeldruck an = 27 , 71 :";
INPUT "",esc|,code|
dopp$=CHR$(esc|)+CHR$(code|)
PRINT AT(1,15);"Doppeldruck aus = 27 , 72 :";
INPUT "",esc|,code|
doppaus$=CHR$(esc|)+CHR$(code|)
druck$=CHR$(27)+"R"+CHR$(2)+schmalaus$+elite$
ALERT 3,"Sollte sich auf diese Weise|dein Drucker NICHT anpassen|lassen,so mußt du das Programm|ändern!",1," INFO | Geht ",a|
IF a|=1
ALERT 3,"Die Variabeln für den|Druckertreiber stehen in der|Procedure VORBEREITUNG und|sind mit Kommentar versehen",1,"Viel|Erfolg|Hilfe",a|
IF a|=3
ALERT 3,"Wenn's immer noch nicht klappt|ruf mich einmal an!|Tel.:0 64 24 / 45 04 n. 18:00h",1,"Mach|ich",a|
ENDIF
ENDIF
@cl_s
@ausgabe_ab_zeile(oberste%+1)
@menueleiste
DEFMOUSE pfeil$
CASE "a","A"
OB_STATE(r_einstell%,ascmod&)=0
OB_STATE(r_einstell%,twmod&)=8
asc!=TRUE
tw!=FALSE
CASE "t","T"
OB_STATE(r_einstell%,ascmod&)=8
OB_STATE(r_einstell%,twmod&)=0
asc!=FALSE
tw!=TRUE
CASE "p","P"
frei%=FRE(0)
frei_zeilen%=max_zeilen%-anzahl_zeilen%
ALERT 3,"Freier Speicherplatz:|In Bytes : "+STR$(frei%)+"|In Zeilen : "+STR$(frei_zeilen%),1," Okay ",a|
DEFMOUSE pfeil$
CASE "g","G"
@seite_zeigen
CASE "n","N"
OB_STATE(r_einstell%,trennan&)=0
OB_STATE(r_einstell%,trennaus&)=8
trenne!=TRUE
CASE "v","V"
OB_STATE(r_einstell%,trennan&)=8
OB_STATE(r_einstell%,trennaus&)=0
trenne!=FALSE
ENDSELECT
RETURN
> PROCEDURE seitenformat
LOCAL x&,y&,b&,h&,temp$,zp|,sp|,exit%,okay!
zp|=CRSLIN
sp|=CRSCOL
DEFMOUSE crs1$
PRINT CHR$(27)+"f";
'
' Alte Tabpos löschen
'
IF tabulator%>0
FOR i|=1 TO zlen% STEP tabulator%
tabulator!(i|)=FALSE
NEXT i|
tabulator!(1)=FALSE
ENDIF
ARRAYFILL seiten!(),FALSE
'
CHAR{{OB_SPEC(r_seitenform%,sfrmpl&)}}=STR$(papierlen%)
CHAR{{OB_SPEC(r_seitenform%,sfrmak&)}}=STR$(kopfob%)
CHAR{{OB_SPEC(r_seitenform%,sfrmao&)}}=STR$(aboben%)
CHAR{{OB_SPEC(r_seitenform%,sfrmau&)}}=STR$(abunten%)
CHAR{{OB_SPEC(r_seitenform%,sfrmaf&)}}=STR$(fuss%)
CHAR{{OB_SPEC(r_seitenform%,sfrmkol&)}}=kopfl$
CHAR{{OB_SPEC(r_seitenform%,sfrmkom&)}}=kopfm$
CHAR{{OB_SPEC(r_seitenform%,sfrmkor&)}}=kopfr$
CHAR{{OB_SPEC(r_seitenform%,sfrmful&)}}=fussl$
CHAR{{OB_SPEC(r_seitenform%,sfrmfum&)}}=fussm$
CHAR{{OB_SPEC(r_seitenform%,sfrmfur&)}}=fussr$
CHAR{{OB_SPEC(r_seitenform%,sfrmtab&)}}=STR$(tabulator%)
CHAR{{OB_SPEC(r_seitenform%,sfrmlr&)}}=STR$(lrand%)
CHAR{{OB_SPEC(r_seitenform%,sfrmrr&)}}=STR$(rrand%)
seitelen%=papierlen%-(kopfob%+aboben%+abunten%+fuss%)
' CHAR{{OB_SPEC(r_seitenform,sfrmdrl&)}}=STR$(seitelen%)
REPEAT
~FORM_CENTER(r_seitenform%,x&,y&,b&,h&)
GET x&-3,y&-3,x&+b&,y&+h&,temp$
~OBJC_DRAW(r_seitenform%,0,7,0,0,640,400)
TEXT 254,242," "
TEXT 254,242,STR$(seitelen%)
exit%=FORM_DO(r_seitenform%,sfrmpl&)
papierlen%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmpl&)}})
kopfob%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmak&)}})
aboben%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmao&)}})
abunten%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmau&)}})
fuss%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmaf&)}})
kopfl$=CHAR{{OB_SPEC(r_seitenform%,sfrmkol&)}}
kopfm$=CHAR{{OB_SPEC(r_seitenform%,sfrmkom&)}}
kopfr$=CHAR{{OB_SPEC(r_seitenform%,sfrmkor&)}}
fussl$=CHAR{{OB_SPEC(r_seitenform%,sfrmful&)}}
fussm$=CHAR{{OB_SPEC(r_seitenform%,sfrmfum&)}}
fussr$=CHAR{{OB_SPEC(r_seitenform%,sfrmfur&)}}
tabulator%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmtab&)}})
lrand%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmlr&)}})
zlen%=VAL(CHAR{{OB_SPEC(r_seitenform%,sfrmrr&)}})
seitelen%=papierlen%-(kopfob%+aboben%+abunten%+fuss%)
~OBJC_CHANGE(r_seitenform%,exit%,0,x&,y&,b&,h&,0,0)
PUT x&-3,y&-3,temp$
IF exit%=sfrmok&
IF seitelen%>1 !seitelen%>5 AND seitelen%<80
OPTION BASE 0
FOR i%=0 TO max_zeilen%-1 STEP seitelen%
seiten!(i%)=TRUE
NEXT i%
FOR i|=0 TO seitelen%-1
seiten!(i|)=FALSE
NEXT i|
OPTION BASE 1
okay!=TRUE
ELSE
ALERT 3,"Fehler beim Seitenformat|Bitte Handbuch lesen und|Werte prüfen!",1,"Nochmal",a%
DEFMOUSE pfeil$
ENDIF
ENDIF
UNTIL okay!
IF tabulator%>0
FOR i|=1 TO zlen% STEP tabulator%
tabulator!(i|)=TRUE
NEXT i|
tabulator!(1)=FALSE
ENDIF
DEFMOUSE pfeil$
@tableiste
PRINT CHR$(27)+"e";
PRINT AT(sp|,zp|);
RETURN
> PROCEDURE einstellung_grafik
DEFFILL 1,2,8
PBOX 118,59,520,359
DEFFILL 0
PBOX 124,65,514,353
DEFFILL 1,2,8
TEXT 220,87,"-- Druckereinstellung --"
LINE 124,97,518,97
LINE 122,103,516,103
TEXT 134,129,"Near Leader Quality NLQ :"
TEXT 134,154,"Schmalschrift :"
TEXT 134,179,"Proportional :"
TEXT 134,204,"Schriftart PICA :"
TEXT 134,229,"Schriftart ELITE :"
TEXT 134,254,"Kursivschrift :"
TEXT 134,279,"Zeile zweimal Drucken :"
DEFFILL 1,2,8
PBOX 132,321,506,347
DEFFILL 1,0
PBOX 134,323,504,345
TEXT 240,339,"Einstellung Fertig"
@buttons_zeigen
RETURN
> PROCEDURE buttons_zeigen
LOCAL z%,i%
DEFFILL 0
PBOX 348,112,485,283
DEFFILL 1,2,8
GRAPHMODE 3
z%=1
FOR i%=113 TO 281 STEP 25
IF par!(z%)
PBOX 350,i%,408,i%+17
BOX 424,i%,482,i%+17
ELSE
PBOX 424,i%,482,i%+17
BOX 350,i%,408,i%+17
ENDIF
TEXT 370,i%+14,"Ja"
TEXT 437,i%+14,"Nein"
INC z%
NEXT i%
GRAPHMODE 1
RETURN
> PROCEDURE einstellung_select
LOCAL mx&,my&,mk|
DEFMOUSE crs1$
REPEAT
MOUSE mx&,my&,mk|
IF mk|=1
IF (mx&>350 AND mx&<408) OR (mx&>424 AND mx&<482)
SELECT my&
CASE 113 TO 130 ! NLQ wählen
IF mx&>350 AND mx&<408
par!(1)=TRUE
par!(2)=FALSE
ELSE IF mx&>424 AND mx&<482
par!(1)=FALSE
ENDIF
CASE 138 TO 155 ! Schmalschrift
IF mx&>350 AND mx&<408
par!(2)=TRUE
par!(1)=FALSE
par!(3)=FALSE
ELSE IF mx&>424 AND mx&<482
par!(2)=FALSE
par!(5)=TRUE
ENDIF
CASE 163 TO 180 ! Proportional
IF mx&>350 AND mx&<408
par!(3)=TRUE
par!(2)=FALSE
par!(4)=FALSE
par!(5)=FALSE
ELSE IF mx&>424 AND mx&<482
par!(3)=FALSE
par!(5)=TRUE
ENDIF
CASE 188 TO 205 ! Pica
IF mx&>350 AND mx&<408
par!(3)=FALSE
par!(4)=TRUE
par!(5)=FALSE
ELSE IF mx&>424 AND mx&<482
par!(4)=FALSE
par!(5)=TRUE
ENDIF
CASE 213 TO 230 ! Elite
IF mx&>350 AND mx&<408
par!(3)=FALSE
par!(5)=TRUE
par!(4)=FALSE
ELSE IF mx&>424 AND mx&<482
par!(5)=FALSE
par!(4)=TRUE
ENDIF
CASE 238 TO 255 ! Doppeldruck
IF mx&>350 AND mx&<408
par!(6)=TRUE
ELSE IF mx&>424 AND mx&<482
par!(6)=FALSE
ENDIF
CASE 263 TO 280 ! Zeile zweimal drucken
IF mx&>350 AND mx&<408
par!(7)=TRUE
ELSE IF mx&>424 AND mx&<482
par!(7)=FALSE
ENDIF
ENDSELECT
@buttons_zeigen
ELSE IF my&>323 AND my&<345
IF mx&>134 AND mx&<504
mk|=4
ENDIF
ENDIF
ENDIF
UNTIL mk|=4 OR INKEY$=CHR$(13)
druck$=""
IF par!(1)
druck$=druck$+nlq$
ELSE
druck$=druck$+nlqaus$
ENDIF
IF par!(2)=TRUE
druck$=druck$+schmal$
ELSE
druck$=druck$+schmalaus$
ENDIF
IF par!(3)
druck$=druck$+prop$
ELSE
druck$=druck$+propaus$
ENDIF
IF par!(4)
IF zlen%>65
ALERT 1,"ACHTUNG:|Der Text wird auf PICA|umformatiert!|Wirklich ausführen ???",1," Ja | Nein ",a|
DEFMOUSE pfeil$
IF a|=1
druck$=druck$+pica$
zlen%=65
@textformat(1,anzahl_zeilen%)
@tableiste
ELSE
druck$=druck$+elite$
ENDIF
ENDIF
ELSE
druck$=druck$+elite$
ENDIF
IF par!(5)
druck$=druck$+elite$
ELSE
druck$=druck$+pica$
ENDIF
IF par!(6)
druck$=druck$+kur$
ELSE
druck$=druck$+kuraus$
ENDIF
DEFMOUSE pfeil$
RETURN
' ----------------------------------------------------------------------------
' Formatieren des Textes, der Zeilen, prüfen von Zeilen
' ----------------------------------------------------------------------------
> PROCEDURE format_absatz
LOCAL sp|,zp|,z|,rest$
sp|=CRSCOL
zp|=CRSLIN
z|=1
IF RIGHT$(zeile$(nr%))<>CHR$(174)
REPEAT
p|=INSTR(zeile$(nr%+z|)," ")
IF p|
IF LEN(zeile$(nr%+z|-1))+p|<zlen%
zeile$(nr%+z|-1)=zeile$(nr%+z|-1)+LEFT$(zeile$(nr%+z|),p|)
PRINT AT(1,zp|+z|-1);CHR$(27)+"l";zeile$(nr%+z|-1);AT(sp|,zp|);
zeile$(nr%+z|)=MID$(zeile$(nr%+z|),p|+1)
IF zp|+z|<24
PRINT AT(1,zp|+z|);CHR$(27)+"l";zeile$(nr%+z|);AT(sp|,zp|);
ENDIF
INC z|
ELSE
p|=0
ENDIF
ELSE
p|=0
ENDIF
UNTIL p|=0 OR RIGHT$(zeile$(nr%+z|-1))=CHR$(174) OR LEN(zeile$(nr%+z|-1))+p|>zlen%
ENDIF
@menueleiste
RETURN
> PROCEDURE format_zurueck
LOCAL sp|,zp|,rest$,p|,p1|,z&
sp|=CRSCOL
zp|=CRSLIN
z&=1
' ALERT 1,"fromat_zurueck Von, bis|"+STR$(von%)+" "+STR$(bis%)+"|"+STR$(anzahl_zeilen%),1,"sadf",a
IF insertmode!
zeile$(nr%)=LEFT$(zeile$(nr%),sp|-1)+taste$+MID$(zeile$(nr%),sp|)
ELSE
IF sp|>laenge%
zeile$(nr%)=LEFT$(zeile$(nr%),sp|)+taste$+MID$(zeile$(nr%),sp|)
ELSE
MID$(zeile$(nr%),sp|)=taste$
ENDIF
ENDIF
IF RIGHT$(zeile$(nr%))<>CHR$(174)
REPEAT
p|=RINSTR(zlen%,zeile$(nr%+z&-1)," ")
IF p|
rest$=MID$(zeile$(nr%+z&-1),p|+1)
zeile$(nr%+z&-1)=LEFT$(zeile$(nr%+z&-1),p|)
IF RIGHT$(rest$)<>" " AND rest$<>" "
rest$=rest$+" "
ENDIF
zeile$(nr%+z&)=rest$+zeile$(nr%+z&)
CLR rest$
PRINT AT(1,zp|+z&-1);CHR$(27)+"l";zeile$(nr%+z&-1);AT(sp|,zp|);
IF zp|+z&<24 AND LEN(zeile$(nr%+z&))<zlen%
PRINT AT(1,zp|+z&);CHR$(27)+"l";zeile$(nr%+z&);AT(sp|,zp|);
ENDIF
INC z&
ELSE
p|=0
ENDIF
UNTIL p|=0 OR RIGHT$(zeile$(nr%+z&-1))=CHR$(174) OR nr%+z&>=anzahl_zeilen%
ELSE
p|=RINSTR(zlen%,zeile$(nr%)," ")
p1|=RINSTR(zlen%,zeile$(nr%),"-")
p|=MAX(p|,p1|)
rest$=MID$(zeile$(nr%),p|+1)
zeile$(nr%)=LEFT$(zeile$(nr%),p|)!+taste$
PRINT AT(1,zp|);CHR$(27)+"l";zeile$(nr%)
IF zp|<23
PRINT AT(1,zp|+1);CHR$(27)+"L";rest$
INSERT zeile$(nr%+1)=rest$
ELSE
@scroll_rauf
DEC zp|
PRINT AT(1,zp|+1);CHR$(27)+"L";rest$
INSERT zeile$(nr%+1)=rest$
ENDIF
ENDIF
@menueleiste
RETURN
> PROCEDURE trenn
LOCAL sp|,zp|,p|,p1|,rest$,laenge|,spa|,spos|,trennen$
nr%=oberste%-2+CRSLIN
sp|=CRSCOL
zp|=CRSLIN
p|=RINSTR(zeile$(nr%)," ")
p1|=RINSTR(zeile$(nr%),"-")
IF p1|>p|
p|=p1|
ENDIF
IF p|
rest$=RIGHT$(zeile$(nr%),LEN(zeile$(nr%))-p|)+taste$
IF trenne!
p1|=INSTR(rest$," ")
IF p1|>0
@silbentrennung(LEFT$(rest$,p1|),trennstelle|)
ELSE
@silbentrennung(rest$,trennstelle|)
ENDIF
ELSE
trennstelle|=0
ENDIF
IF trennstelle|>0
ADD p|,trennstelle|-1
rest$=RIGHT$(rest$,LEN(rest$)-trennstelle|+1)
ENDIF
IF links! ! Linksbündig im Speicher
IF trennstelle|>0
zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
ELSE
zeile$(nr%)=LEFT$(zeile$(nr%),p|)
ENDIF
ELSE IF rechts! !rechtsbündig im Speicher
IF trennstelle|>0
zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
ELSE
zeile$(nr%)=LEFT$(zeile$(nr%),p|)
ENDIF
zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
ELSE IF zentre!
zeile$(nr%)=LEFT$(zeile$(nr%),p|)
laenge|=LEN(zeile$(nr%))
spa|=zlen%/2-(TRUNC(laenge|/2))
zeile$(nr%)=SPACE$(spa|)+zeile$(nr%)
ELSE IF blocksatz!
IF trennstelle|>0
zeile$(nr%)=LEFT$(zeile$(nr%),p|)+"-"
ELSE
zeile$(nr%)=LEFT$(zeile$(nr%),p|)
ENDIF
spos|=1
IF INSTR(zeile$(nr%)," ")
REPEAT
laenge|=LEN(zeile$(nr%))
spa|=INSTR(spos|,zeile$(nr%)," ")
IF spa|
zeile$(nr%)=LEFT$(zeile$(nr%),spa|-1)+" "+MID$(zeile$(nr%),spa|)
spos|=spa|+2
ELSE
IF laenge|<zlen%
spos|=1
ENDIF
ENDIF
UNTIL laenge|>=zlen%-1
ENDIF
ENDIF
PRINT AT(1,zp|);CHR$(27)+"l";AT(1,zp|);zeile$(nr%)
INC nr%
INC zp|
INSERT zeile$(nr%)=rest$
IF zp|>24
@scroll_rauf
zp|=24
ENDIF
PRINT AT(1,zp|);CHR$(27)+"l";
PRINT AT(1,zp|);zeile$(nr%);
PRINT AT(1+LEN(zeile$(nr%)),zp|);CHR$(27)+"e";
ENDIF
RETURN
> PROCEDURE textformat(von%,bis%)
LOCAL rest%,p|,p1|
IF anzahl_zeilen%>1
IF RIGHT$(zeile$(bis%))<>CHR$(174)
bis%=anzahl_zeilen%
ENDIF
IF links!
IF von%>0 AND von%<=anzahl_zeilen% AND bis%>von% AND bis%<=anzahl_zeilen%
FOR i%=von% TO bis%
zeile$(i%)=TRIM$(zeile$(i%))
laenge|=LEN(zeile$(i%))
IF laenge|>zlen%
p|=RINSTR(zlen%,zeile$(i%)," ")
p1|=RINSTR(zlen%,zeile$(i%),"-")
IF p1|>p|
p|=p1|
ENDIF
rest$=MID$(zeile$(i%),p|)
zeile$(i%)=LEFT$(zeile$(i%),p|)
IF zeile$(i%+1)<>""
zeile$(i%+1)=rest$+zeile$(i%+1)
ELSE
INSERT zeile$(i%+1)=rest$
INC anzahl_zeilen%
ENDIF
ENDIF
FOR l|=1 TO LEN(zeile$(i%))
IF MID$(zeile$(i%),l|,1)=" "
REPEAT
t$=MID$(zeile$(i%),l|+1,1)
IF t$=CHR$(32)
zeile$(i%)=LEFT$(zeile$(i%),l|)+MID$(zeile$(i%),l|+2)
ENDIF
UNTIL t$<>CHR$(32)
ENDIF
NEXT l|
NEXT i%
oberste%=0
@ausgabe_ab_zeile(oberste%+1)
ENDIF
ELSE IF rechts!
IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
FOR i%=von% TO bis%
zeile$(i%)=TRIM$(zeile$(i%))
zeile$(nr%)=SPACE$(zlen%-LEN(zeile$(nr%)))+zeile$(nr%)
NEXT i%
@ausgabe_ab_zeile(oberste%+1)
ENDIF
ELSE IF zentre!
IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
FOR i%=von% TO bis%
zeile$(i%)=TRIM$(zeile$(i%))
laenge|=LEN(zeile$(i%))
spa|=zlen%/2-(TRUNC(laenge|/2))
zeile$(i%)=SPACE$(spa|)+zeile$(i%)
NEXT i%
@ausgabe_ab_zeile(oberste%+1)
ENDIF
ELSE IF blocksatz!
IF von%<anzahl_zeilen% AND bis%<=anzahl_zeilen%
FOR i%=von% TO bis%
zeile$(i%)=TRIM$(zeile$(i%))
spos|=1
IF INSTR(zeile$(i%)," ")
REPEAT
laenge|=LEN(zeile$(i%))
sp|=INSTR(spos|,zeile$(i%)," ")
IF sp|
zeile$(i%)=LEFT$(zeile$(i%),sp|-1)+" "+MID$(zeile$(i%),sp|)
spos|=sp|+2 !INSTR(sp%+1,zeile$(nr%)," ")
ELSE
IF laenge|<zlen%
spos|=1
ENDIF
ENDIF
UNTIL laenge|>=zlen%-1
ENDIF
NEXT i%
@ausgabe_ab_zeile(oberste%+1)
ENDIF
ENDIF
@menueleiste
ENDIF
RETURN
> PROCEDURE zeile_testen(VAR zeile$)
LOCAL z$
FOR l|=1 TO LEN(zeile$)
z$=MID$(zeile$,l|,1)
SELECT z$
CASE "ä"
z$=CHR$(123)
CASE "ü"
z$=CHR$(125)
CASE "ö"
z$=CHR$(124)
CASE "Ä"
z$=CHR$(91)
CASE "Ü"
z$=CHR$(93)
CASE "Ö"
z$=CHR$(92)
CASE "ß"
z$=CHR$(126)
CASE "§"
z$=CHR$(64)
ENDSELECT
MID$(zeile$,l|,1)=z$
NEXT l|
RETURN
> PROCEDURE silbentrennung(wort$,VAR pos|)
' gibt eine Trennstelle zurück, die nach Pos liegt
pos|=0
kflag!=FALSE
IF LEN(wort$)>4 THEN
' nur Worte testen, die lang genug sind
REPEAT
IF pos|=1 THEN
' Vorsilbentest nur durchführen, wenn am Wortanfang
FOR i|=1 TO 24
IF INSTR(UPPER$(wort$),UPPER$(vorsilbe$(i|)))=1 THEN
' Vorsilbe gefunden
pos|=LEN(vorsilbe$(i|))+1
ENDIF
NEXT i|
ENDIF
' wenn keine Vorsilbe in Frage kommt, normal trennen
IF pos|=0 THEN
' ersten Vokal im Wort suchen
stelle|=pos|
WHILE (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) AND (stelle|<=LEN(wort$))
INC stelle|
WEND
' Stelle zeigt jetzt auf ersten Vokal oder Wortende
IF stelle|<LEN(wort$)-1 THEN
' nächsten Konsonanten suchen
REPEAT
INC stelle|
UNTIL (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) OR (stelle|>=LEN(wort$))
' zweiten Vokal nach POS suchen
WHILE (INSTR(vokalmenge$,MID$(wort$,stelle|,1))=0) AND (stelle|<=LEN(wort$))
INC stelle|
WEND
IF stelle|<=LEN(wort$) THEN
pos|=stelle|-1
' Trennmöglichkeit = Konsonant vor zweitem Vokal
ENDIF
ENDIF
ENDIF
' Trennmöglichkeit auf Gültigkeit überprüfen
IF pos|<>0 THEN
' nicht trennbare Kombinationen ausschließen
sch|=INSTR(UPPER$(wort$),"SCH")
IF (sch|<>0) AND ((sch|=pos|-2) OR (sch|=pos|-3)) THEN
' vor SCH trennen
pos|=sch|
ENDIF
IF INSTR(nichttrennen$,MID$(wort$,pos|-1,2))<>0 THEN
' vor nicht-trennbarer Kombination trennen
DEC pos|
ENDIF
IF MID$(wort$,pos|-1,2)="ck" THEN
' ck wird als kk getrennt, deshalb Flag setzen
kflag!=TRUE
ENDIF
IF (pos|<=2) OR (pos|>=LEN(wort$)) THEN
stelle|=0
pos|=0
ENDIF
ENDIF
UNTIL (pos|<>0) OR (stelle|>=LEN(wort$)-1)
ENDIF
RETURN
> PROCEDURE seitenummer_drucken(VAR s$)
LOCAL p|,seite$
p|=INSTR(s$,"#")
IF p|
seite$=STR$(INT(i%/seitelen%)+1)
IF LEN(seite$)=1
MID$(s$,p|,1)=seite$
ELSE
s$=LEFT$(s$,p|-1)+seite$+MID$(s$,p|+1)
ENDIF
ENDIF
RETURN
> PROCEDURE sheet(a%,b%,c%,d%,e%)
DEFFILL 1,1,1
PBOX a%+e%,b%+e%,c%+e%,d%+e%
DEFFILL 1,0,0
PBOX a%,b%,c%,d%
BOX a%+1,b%+1,c%-1,d%-1
RETURN
> PROCEDURE head(a%,b%,c%,a$)
DEFFILL 1,1,1
PBOX a%+2,b%+2,c%+2,b%+19
DEFFILL 1,2,4
PBOX a%,b%,c%,b%+17
pos%=a%+(c%-a%)/2-((LEN(a$)+2)/2)*8
TEXT pos%,b%+14," "+a$+" "
RETURN
> PROCEDURE tbc
REPEAT
z$=INKEY$
UNTIL z$=""
RETURN
> PROCEDURE seite_zeigen
LOCAL cc$,se|,sp|,zp|
sp|=CRSCOL
zp|=CRSLIN
se|=INT((oberste%-2+zp|-1)/seitelen%)
GET 95,25,280,91+4*seitelen%,cc$
@sheet(95,25,275,86+4*seitelen%,5)
@head(100,30,270,"Übersicht S."+STR$(1+se|))
FOR i%=1 TO seitelen%
FOR j%=1 TO LEN(zeile$((se|*seitelen%)+i%)) !zlen%
IF MID$(zeile$(se|*seitelen%+i%),j%,1)<>" "
BOX 103+2*j%,48+4*i%,103+2*j%,50+4*i%
ENDIF
NEXT j%
NEXT i%
@sheet(102,60+4*seitelen%,267,79+4*seitelen%,2)
TEXT 177,75+4*seitelen%,"Ok"
' REPEAT
' MOUSE x%,y%,k%
' i$=INKEY$
' UNTIL i$=CHR$(13) OR (k%=1 AND x%>102 AND x%<267 AND y%>60+4*m.ax% AND y%<79+4*m.ax%)
REPEAT
UNTIL INKEY$<>"" OR MOUSEK
PUT 95,25,cc$
PRINT AT(sp|,zp|);
RETURN
'
vorsilben:
DATA heraus,unter,hinunter,silben,trenn
DATA ab,an,bei,be,er,ge,feg,fe,um,un,ur,zu,ok
DATA auf,aus,dar,ein,ent,her,hin,miß,ver,vor,weg,zer
DATA nach,über